我想要所有应用程序错误的通用错误页面。
我已遵循指南在ASP.NET核心中创建自定义错误处理程序,并且可以按预期捕获错误。但是,我看不到如何重定向到处理该页面的一般错误。示例似乎集中于Web API,而不是UI。 我有以下自定义错误处理代码
private static Task HandleExceptionAsync(HttpContext context, Exception exception)
{
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
int exceptionId = ExceptionManager.Publish(exception);
return context.Response.WriteAsync(new ErrorViewModel()
{
ExceptionId = exceptionId
}.ToString());
}
将异常详细信息记录到数据库中并返回一个ID。我有一个显示ID的控制器操作,以便用户可以报告它。
如何重定向到错误视图?
答案 0 :(得分:0)
在Startup.cs方法中,您需要像下面那样调用ExceptionHandlerMiddleware。
app.UseMiddleware(typeof(ExceptionHandlerMiddleware));
创建一个中间件类并编写以下代码
public class ExceptionHandlerMiddleware
{
private readonly RequestDelegate next;
public ExceptionHandlerMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
//Write you logic
}
catch (Exception ex)
{
await HandleExceptionAsync(context, ex);
}
}
private static async Task HandleExceptionAsync(HttpContext context, Exception exception)
{
context.Response.StatusCode = 500;
if (IsRequestAPI(context))
{
//when request api
context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonConvert.SerializeObject(new
{
State = 500,
message = exception.Message
}));
}
else
{
//when request page
context.Response.Redirect("/Home/Errorpage");
}
}
}
中间件将“瀑布”下来,直到全部执行完毕或一个执行停止为止(在我们的异常处理的情况下,我们将编写我们的程序,以便它停止执行。稍后会详细介绍)。
传递给中间件的第一件事是请求委托。这是一个接受当前HttpContext对象并执行它的委托。您的中间件在创建时将其保存下来,并在Invoke()步骤中使用它。 Invoke()是完成工作的地方。作为中间件的一部分,您想要对请求/响应进行的操作都在这里完成。中间件的其他一些用法可能是基于标头授权请求,或将标头注入请求或响应中。有关更多示例,请查看Middleware documentation.