當我運行我的 api 時,我的 ErrorController 將忽略并且不起作用。這是我的 program.cs 課程
app.UseExceptionHandler("/error");
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();
我的身份驗證控制器:
[ApiController]
[AllowAnonymous]
public class AuthController:ControllerBase
{
...
...
[HttpPost]
[Route("AccessToken")]
public async Task<IActionResult> AccessToken([FromBody] LoginCredential? credential)
{
var user = await
_userRepository.FindUserByEmail(credential.Email,credential.Password);
if (user is null)
{
return new BadRequestObjectResult(new { Message = "Login Failed" });
}
var accessToken = GenerateToken(user);
return Ok(new { AccessToken = accessToken });
}
最后是 ErrorsController 類:
public class ErrorsController:ControllerBase
{
[Route("/Error")]
[HttpGet]
public IActionResult Error()
{
return Problem();
}
}
但是,當我在 ErrorsController 中洗掉 [Httpget] 時,我收到“Ambiguous HTTP method for action”錯誤。
uj5u.com熱心網友回復:
正如本檔案中所解釋的:
不要使用 HTTP 方法屬性(例如 HttpGet)標記錯誤處理程式操作方法。顯式動詞會阻止某些請求到達操作方法。對于使用 Swagger / OpenAPI 的 Web API,使用 [ApiExplorerSettings] 屬性標記錯誤處理程式操作并將其 IgnoreApi 屬性設定為 true。
如果在你的Error方法上添加[HttpGet]屬性,當你在post方法中出錯時,它不會進入方法并拋出405錯誤,如果你洗掉[HttpGet]屬性而不添加[ApiExplorerSettings],swagger會扔Ambiguous HTTP method for action
我在我的情況下嘗試如下:
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{ app.UseSwagger(); app.UseSwaggerUI();
}
app.UseExceptionHandler("/Error");
//make sure there're on other error handle middlewares behind it
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
控制器:
[ApiController]
public class ErrorController : ControllerBase
{
[Route("/error")]
[ApiExplorerSettings(IgnoreApi = true)]
public IActionResult HandleError()
{
return Problem();
}
}
結果:

關于處理驗證失敗錯誤回應,您可以查看此檔案以獲取更多詳細資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/521046.html
