之前的博文 ASP.NET Core中显示自定义错误页面 中的方法是在项目中硬编码实现的,当有多个项目时,就会造成不同项目之间的重复代码,不可取。

在这篇博文中改用middleware实现,并且放在独立的项目中发布成NuGet包,项目中使用时只需安装NuGet包,然后在Startup的Configure()方法中添加如下的一行代码。

app.UseCustomErrorPages();

CustomErrorPagesMiddleware的实现代码如下:

public class CustomErrorPagesMiddleware
{private readonly RequestDelegate _next;private readonly ILogger _logger;public CustomErrorPagesMiddleware(RequestDelegate next,ILoggerFactory loggerFactory){_next = next;_logger = loggerFactory.CreateLogger<CustomErrorPagesMiddleware>();}public async Task Invoke(HttpContext context){try{await _next(context);}catch (Exception ex){_logger.LogError(0, ex, "An unhandled exception has occurred while executing the request");if (context.Response.HasStarted){_logger.LogWarning("The response has already started, the error page middleware will not be executed.");throw;}try{context.Response.Clear();context.Response.StatusCode = 500;return;}catch (Exception ex2){_logger.LogError(0, ex2, "An exception was thrown attempting to display the error page.");}throw;}finally{var statusCode = context.Response.StatusCode;if (statusCode == 404 || statusCode == 500){await ErrorPage.ResponseAsync(context.Response, statusCode);}}}
}

ErrorPage的实现代码如下:

public static class ErrorPage
{public static async Task ResponseAsync(HttpResponse response, int statusCode){if (statusCode == 404){await response.WriteAsync(Page404);}else if (statusCode == 500){await response.WriteAsync(Page500);}}private static string Page404 => @"html...";private static string Page500 => @"html...";
}

CustomErrorPagesExtensions的实现代码如下:

public static class CustomErrorPagesExtensions
{public static IApplicationBuilder UseCustomErrorPages(this IApplicationBuilder app){if (app == null){throw new ArgumentNullException(nameof(app));}return app.UseMiddleware<CustomErrorPagesMiddleware>();}
}

代码参考自:

1)CustomErrorPagesMiddleware.cs

2)DeveloperExceptionPageMiddleware.cs

ASP.NET Core中显示自定义错误页面-增强版相关推荐

  1. react 错误边界_React with GraphQL和错误边界中的自定义错误页面

    react 错误边界 by Abi Noda 通过Abi Noda React with GraphQL和错误边界中的自定义错误页面 (Custom error pages in React with ...

  2. 如何在ASP.NET Core中编写自定义日志记录提供程序

    目录 介绍 如何实现所需的接口 基础类和附件 FileLoggerProvider具体类及其附件 1. ConfigureLogging() 2. appsettings.json文件 介绍 源代码可 ...

  3. HOW-TO:带有Spring MVC的Tomcat中的自定义错误页面

    默认的Tomcat错误页面看起来很可怕. 此外,它们可能会公开有价值的信息,包括服务器版本和异常堆栈跟踪. Servlet规范提供了一种通过web.xml配置异常行为的方法. 可以配置对特定Java异 ...

  4. 如何在ASP.NET Core中创建自定义AuthorizeAttribute?

    本文翻译自:How do you create a custom AuthorizeAttribute in ASP.NET Core? I'm trying to make a custom aut ...

  5. 在ASP.NET Core中创建自定义端点可视化图

    在上篇文章中,我为构建自定义端点可视化图奠定了基础,正如我在第一篇文章中展示的那样.该图显示了端点路由的不同部分:文字值,参数,动词约束和产生结果的端点: 在本文中,我将展示如何通过创建一个自定义的D ...

  6. IE下不显示自定义错误页面

    IIS的通配符要映射到aspnet_isapi.dll .当敲入不合法的URL时,比如: http://www.xxx.com/sdfsdfsdfsdfs ,我们的web.config 定义了 < ...

  7. ASP.NET Core 中的管道机制

    首先,很感谢在上篇文章 C# 管道式编程 中给我有小额捐助和点赞的朋友们,感谢你们的支持与肯定.希望我的每一次分享都能让彼此获得一些收获,当然如果我有些地方叙述的不正确或不当,还请不客气的指出.好了, ...

  8. ASP.NET Core 中文文档 第三章 原理(5)错误处理

    原文:Error Handling 作者:Steve Smith 翻译:谢炀(Kiler) 校对:高嵩(jack2gs).何镇汐 当你的ASP.NET应用发生错误的时候, 你可以采用本文所述的各种方法 ...

  9. ASP.NET自定义错误页面(转)

    ASP.NET自定义错误页面(转) ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件.Application_Error 事件以及应用程序配置文件 (Web ...

最新文章

  1. 【无标题】ubuntu20.04 开机引导后黑屏 光标闪现 无法进入图形桌面的解决方案_Denis.Zzzzzzzz?的博客-CSDN博客_ubuntu20黑屏光标闪烁
  2. 339所!中国内地高校ESI排名出炉:国科大、清华、北大位列前三!
  3. 大整数乘法(POJ2389)
  4. 元素的层次结构和HTML文档结构
  5. 查看 PHP apache nginx mysql 是如何编译的
  6. OpenGL入门-2-颜色
  7. java简单功能测试,java 自动化测试小功能集锦
  8. 快手与2020央视春晚达成独家互动合作:大年三十发红包
  9. Spring with Hibernate persistence and transactions
  10. HADOOP docker(六):hive简易使用指南
  11. Media Queries语法总结
  12. buuctf--CrackRTF
  13. WWF中Conditioned Activity Group的子Activity扩展CAG的WhenCondition属性代码解析
  14. 数据中台在企业数字化转型中的践行(下篇)
  15. 数据分析/运营——数据异常的排查方法
  16. FCN训练自己数据集(person-segmentation)、SIFT-FLOW、SBD和VOC实验总结
  17. 对技术的态度/编程修养(上)
  18. Maven | filtering,filter和profile标签使用
  19. iOS-中集成百度echarts3-0
  20. python load 和loads 区别

热门文章

  1. ElementUI的DateTimePicker组件添加验证规则以及限制选择范围
  2. MySQL高级-索引是个什么东西?explain到底怎么用-MySQL查询优化大全
  3. shell脚本传递参数,并且判断参数是否为空
  4. 需求用例分析之三:补充规约
  5. 找不到 tools.jar。请检查 C:\Program Files\Java\jre1.8.0_151 是否包含有效的 JDK 安装
  6. 审计文件的作用以及记录的内容,审计日志的记录,以及审计日志包括的内容
  7. 5、ShardingSphere 之 公共表
  8. 神策用户画像 2 大功能:千人千面,一人千面,一次给你
  9. 货拉拉携手神策数据,数据赋能企业,实现多元颠覆式创新
  10. 利用 Rize 来进行 UI 测试或 E2E 测试