我在 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,对吧?
答案 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
日志
向api/values/my-method
发送请求,效果很好
POST https://localhost:5001/api/values/my-method
因此,请检查是否将[Route(...)]
应用于控制器,并确保使用正确的URL路径发出请求。