该端点如何响应404状态代码?

时间:2020-06-09 11:08:04

标签: asp.net-core http-status-code-404 http-status-codes

我在 ASP.NET Core 应用程序的一个控制器中有此方法:

[HttpPost("my-method")]
[Authorize(Policies.ADMIN, AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public async Task<ActionResult<bool>> MyMethod()
{
    try
    {
        await DoWork();
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Error while doing work");
        return StatusCode(500, false);
    }

    return Ok(true);
}

但是,有时在调用此端点时会收到404响应。当我查看日志时,会看到以下内容:

  • 15:54:37.334:请求启动HTTP / 1.1 POST https://myurl/my-method应用程序/ x-www-form-urlencoded 0
  • 15:54:37.351:成功验证了令牌。
  • 15:54:37.351:请求在18.0889毫秒内完成 404

因此找到了端点,验证了承载令牌...但是它仍然是404响应。 但是怎么可能?我会说我的方法中唯一可能的输出代码是200和500,对吧?

1 个答案:

答案 0 :(得分:1)

我进行了测试,如果没有任何动作,可以重现相同的问题。在我看来,日志"Request starting HTTP/1.1 POST https://myurl/my-method..."仅表示请求已传入,服务器开始处理它,并不意味着找到了端点,并且命中了您的控制器操作方法。

控制器和操作

[Route("api/[controller]")]
[ApiController]
[Authorize]
public class ValuesController : ControllerBase
{
    [HttpPost("my-method")]
    public async Task<ActionResult<bool>> MyMethod()
    {        
        //...

        return Ok(true);
    }

}

发出POST请求

POST https://localhost:5001/my-method

日志

enter image description here

api/values/my-method发送请求,效果很好

POST https://localhost:5001/api/values/my-method

因此,请检查是否将[Route(...)]应用于控制器,并确保使用正确的URL路径发出请求。