此端点如何响应 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 响应。当我查看日志时,我看到了这个:
- 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,对吗?
我做了一个测试,如果它不符合任何操作,可以重现同样的问题。在我看来,日志 "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 路径发出请求。
我的 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,对吗?
我做了一个测试,如果它不符合任何操作,可以重现同样的问题。在我看来,日志 "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 路径发出请求。