在ASP.NET Core MVC中,当在控制器中引发BadRequestException时,通常会被ErrorController处理并返回一个友好的错误消息。然而,在某些情况下,BadRequestException可能不会被ErrorController捕获,而是直接抛出异常。
要解决此问题,我们可以通过在Startup.cs文件中添加以下代码来捕获未处理的异常并将其重定向到ErrorController:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
//...
app.UseExceptionHandler(errorApp =>
{
errorApp.Run(async context =>
{
var exceptionFeature = context.Features.Get();
var exception = exceptionFeature.Error;
// Redirect to ErrorController
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
context.Response.Redirect($"/Error?message={exception.Message}");
});
});
//...
}
在ErrorController中,我们可以通过查询QueryString来获取错误消息:
public IActionResult Index(string message)
{
var errorModel = new ErrorViewModel
{
Message = message
};
return View(errorModel);
}
通过执行上述步骤,我们可以确保BadRequestException始终由ErrorController处理和返回友好错误消息。