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

How can this endpoint respond a 404 status code?

我的 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 响应。当我查看日志时,我看到了这个:

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

我做了一个测试,如果它不符合任何操作,可以重现同样的问题。在我看来,日志 "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 路径发出请求。