【问题标题】:How can this endpoint respond a 404 status code?该端点如何响应 404 状态码?
【发布时间】:2020-09-28 13:07:06
【问题描述】:

我的 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 application/x-www-form-urlencoded 0
  • 15:54:37.351:成功验证令牌。
  • 15:54:37.351:请求在 18.0889 毫秒内完成 404

所以找到了端点,验证了不记名令牌......然而它是 404 响应。 但怎么可能呢?我会说我的方法唯一可能的输出代码是 200 和 500,对吧?

【问题讨论】:

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


    【解决方案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
    

    日志

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多