Как вызвать API с помощью метода контроллера - PullRequest
0 голосов
/ 08 октября 2018

Я хочу вызвать веб-API ASP.NET Core 2.1.0 с использованием метода контроллера.

Я попытался выполнить следующее, но получаю ошибку

Невозможно получить / api /remote / NewAc / test1

Код:

[Route("api/remote/{action}")]
//[Route("api/[controller]")]
[ApiController]
public class RemoteController : ControllerBase
{
    private readonly MyContext _context;

    public RemoteValsController(MyContext context)
    { _context = context; }

    [HttpGet]
    public async Task<OkObjectResult> NewAc()
    {
        var r = await _context.TypeOfAccounts.AnyAsync();
        return Ok(new { r = true });
    }

    [HttpGet("{id}")]
    public async Task<OkObjectResult> NewAc([FromRoute] string AccountType)
    {
        var r = await _context.TypeOfAccounts.AnyAsync(o => o.AccountType.ToUpper() == AccountType.ToUpper());
        return Ok(new { r = !r });
    }
}

Startup.cs

app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller}/{action=Index}/{id?}");
        });

Я пробовал оба [HttpPost] и [HttpGet], но тщетно.

Ответы [ 2 ]

0 голосов
/ 08 октября 2018

Перепроверьте определенные маршруты для контроллера.

[Route("api/remote/[action]")] //<-- NOTE Token replacement in route templates
[ApiController]
public class RemoteController : ControllerBase {
    private readonly MyContext _context;

    public RemoteController(MyContext context) { 
        _context = context; 
    }

    //GET api/remote/NewAc
    [HttpGet]
    public async Task<IActionResult> NewAc() {
        var r = await _context.TypeOfAccounts.AnyAsync();
        return Ok(new { r = true });
    }

    //GET api/remote/NewAc/test1
    [HttpGet("{accountType}")]
    public async Task<IActionResult> NewAc(string accountType) {
        var r = await _context.TypeOfAccounts.AnyAsync(o => o.AccountType.ToUpper() == accountType.ToUpper());
        return Ok(new { r = !r });
    }
}

Ссылка Маршрутизация к действиям контроллера в ASP.NET Core

0 голосов
/ 08 октября 2018

Во-первых, сопоставленные маршруты и атрибутная маршрутизация являются или / или делом.Если у вас есть атрибуты маршрута, определение маршрута в вашем стартапе вообще не применимо.

Во-вторых, вы не можете просто бросить [FromRoute] перед параметром и волшебным образом использовать его в маршруте.На самом деле, этот атрибут не нужен вообще, если только нет некоторой двусмысленности относительно того, откуда на самом деле должно исходить значение параметра.Если вы хотите его из маршрута, то он должен быть частью вашего шаблона маршрута.Просто:

[HttpGet("{id}/{AccountType}")]
public async Task<OkObjectResult> NewAc(string AccountType)
{
    var r = await _context.TypeOfAccounts.AnyAsync(o => o.AccountType.ToUpper() == AccountType.ToUpper());
    return Ok(new { r = !r });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...