gpt4 book ai didi

asp.net-core - 如何为 View 文件中的异常配置自定义错误页面?

转载 作者:行者123 更新时间:2023-12-04 19:43:40 25 4
gpt4 key购买 nike

我们将 UseStatusCodePagesWithReExecute 与将 Response.StatusCode 设置为 500 的简单自定义中间件结合使用,以成功将用户发送到我们关于 mvc Controller 中发生的异常的自定义错误页面。

但是,对于 razor/cshtml View 中发生的异常,UseStatusCodePagesWithReExecute 不会将用户发送到我们的错误页面(尽管我们的自定义中间件确实在 Invoke()< 中检测到这些异常)。

我们也尝试过使用异常过滤器,但它只捕获来自 Controller 操作的异常,而不是来自 View 的异常。

如果异常源自 View ,是否有办法将用户发送到我们的错误页面?

最佳答案

StatusCodePagesMiddlewareUseStatusCodePagesWithReExecute 扩展调用添加 has the following check执行底层中间件后:

// Do nothing if a response body has already been provided.
if (context.Response.HasStarted
|| context.Response.StatusCode < 400
|| context.Response.StatusCode >= 600
|| context.Response.ContentLength.HasValue
|| !string.IsNullOrEmpty(context.Response.ContentType))
{
return;
}

当开始呈现 View 时,MVC 中间件用 text/html 值填充 Response.ContentType。这就是为什么上面的检查返回 true 并且没有重新执行带有状态代码页的请求。

修复非常简单。在处理异常的中间件中,在 Response 上调用 Clear() 方法:

public async Task InvokeAsync(HttpContext context)
{
try
{
await _next(context);
}
catch (Exception)
{
context.Response.Clear();
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
}
}

Sample Project on GitHub

关于asp.net-core - 如何为 View 文件中的异常配置自定义错误页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49757495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com