ASP.NET 核心 MVC 中的全局错误处理
Global Error Handling in ASP.NET Core MVC
我试图在我的 Asp.net 核心 mvc 网页上实现一个全局错误处理程序。为此,我创建了一个错误处理程序中间件,如 this 博客 post.
中所述
public class ErrorHandlerMiddleware
{
private readonly RequestDelegate _next;
public ErrorHandlerMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception error)
{
var response = context.Response;
response.ContentType = "application/json";
switch (error)
{
case KeyNotFoundException e:
// not found error
response.StatusCode = (int)HttpStatusCode.NotFound;
break;
default:
// unhandled error
response.StatusCode = (int)HttpStatusCode.InternalServerError;
break;
}
var result = JsonSerializer.Serialize(new { message = error?.Message });
await response.WriteAsync(result);
context.Request.Path = $"/error/{response.StatusCode}"; // <----does not work!
}
}
}
中间件按预期工作并捕获错误。结果我得到一个带有错误信息的白页。但我无法显示自定义错误页面。我用下面的代码行试了一下。但这不起作用。
context.Request.Path = $"/error/{response.StatusCode}";
有什么办法可以实现我的目标吗?
提前致谢
您似乎希望将浏览器重定向到错误页面。
为此,您需要替换:
context.Request.Path = $"/error/{response.StatusCode}";
有
context.Reponse.Redirect($"/error/{response.StatusCode}");
此外,由于您要发送重定向,因此响应内容需要为空,因此也删除 response.WriteAsync
位。
var result = JsonSerializer.Serialize(new { message = error?.Message });
await response.WriteAsync(result);
我试图在我的 Asp.net 核心 mvc 网页上实现一个全局错误处理程序。为此,我创建了一个错误处理程序中间件,如 this 博客 post.
中所述 public class ErrorHandlerMiddleware
{
private readonly RequestDelegate _next;
public ErrorHandlerMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception error)
{
var response = context.Response;
response.ContentType = "application/json";
switch (error)
{
case KeyNotFoundException e:
// not found error
response.StatusCode = (int)HttpStatusCode.NotFound;
break;
default:
// unhandled error
response.StatusCode = (int)HttpStatusCode.InternalServerError;
break;
}
var result = JsonSerializer.Serialize(new { message = error?.Message });
await response.WriteAsync(result);
context.Request.Path = $"/error/{response.StatusCode}"; // <----does not work!
}
}
}
中间件按预期工作并捕获错误。结果我得到一个带有错误信息的白页。但我无法显示自定义错误页面。我用下面的代码行试了一下。但这不起作用。
context.Request.Path = $"/error/{response.StatusCode}";
有什么办法可以实现我的目标吗?
提前致谢
您似乎希望将浏览器重定向到错误页面。
为此,您需要替换:
context.Request.Path = $"/error/{response.StatusCode}";
有
context.Reponse.Redirect($"/error/{response.StatusCode}");
此外,由于您要发送重定向,因此响应内容需要为空,因此也删除 response.WriteAsync
位。
var result = JsonSerializer.Serialize(new { message = error?.Message });
await response.WriteAsync(result);