Не ударил маршрут ASP.Net, возвращая ошибку 404 почтальону? - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть маршрутизатор ASP.NET Web API, который, кажется, не получает удар при переходе на правильный маршрут.

Вот мой контроллер Web API:

[Route("api/[controller]")]
[ApiController]
public class AccountController : ControllerBase
{
    #region Declarations
    private readonly UserManager<ApplicationUser> _userManager;
    private readonly RoleManager<IdentityRole> _roleManager;
    private readonly ApplicationDbContext _context;
    private readonly IHostingEnvironment _hostingEnvironment;
    #endregion

    public AccountController(
        UserManager<ApplicationUser> userManager,
        RoleManager<IdentityRole> roleManager,
        ApplicationDbContext context,
        IHostingEnvironment environment
        )
    {
        _userManager = userManager;
        _roleManager = roleManager;
        _context = context;
        _hostingEnvironment = environment;
    }

    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        return new string[] { "Account", "Controller" };
    }

    [HttpPost]
    public async Task<IActionResult> GetToken()
    {
        var client = new DiscoveryClient("http://localhost:15547");
        client.Policy.RequireHttps = false;
        var disco = await client.GetAsync();
        if (disco.IsError)
        {
            return BadRequest(disco.Error);
        }

        TokenClient tokenClient = new TokenClient(disco.TokenEndpoint, "ro.angular", "secret");
        TokenResponse tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync("ahmer", "Default@69", "api1 openid");

        if (tokenResponse.IsError)
        {
            return BadRequest(tokenResponse.Error);
        }

        //var user = _userManager.FindByNameAsync(model.UserName);

        var result = await _userManager.FindByNameAsync("ahmer");

        return BadRequest("Invalid username or password.");
    }
}

Однако,мой маршрут GET http://localhost:15547/api/account/ работает нормально, но когда я пытаюсь сделать запрос POST http://localhost:15547/api/account/GetToken, он не попадает, и он показывает мне сообщение 404 от Почтальона.Что я делаю неправильно в моем коде.

Выход 1

enter image description here

Выход 2

enter image description here

1 Ответ

0 голосов
/ 07 февраля 2019

Маршрут по умолчанию ASP.NET CORE отличается от системы маршрутов по умолчанию ASP.NET MVC.

Прямо сейчас:

[HttpPost]
public async Task<IActionResult> GetToken()

будет соответствовать POST : http://localhost:15547/api/account, даже если имя действия GetToken.Вот почему вы нажали 404.

Вы должны установить шаблон маршрута на "gettoken", чтобы он работал так, как вы хотите:

[HttpPost("gettoken")]
public async Task<IActionResult> GetToken()

Это будет указывать ASP.NET, что это действие должносоответствует POST http://localhost:15547/api/account/GetToken

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...