ASP.NET Core中显示自定义错误页面-增强版
之前的博文 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中显示自定义错误页面-增强版相关推荐
- react 错误边界_React with GraphQL和错误边界中的自定义错误页面
react 错误边界 by Abi Noda 通过Abi Noda React with GraphQL和错误边界中的自定义错误页面 (Custom error pages in React with ...
- 如何在ASP.NET Core中编写自定义日志记录提供程序
目录 介绍 如何实现所需的接口 基础类和附件 FileLoggerProvider具体类及其附件 1. ConfigureLogging() 2. appsettings.json文件 介绍 源代码可 ...
- HOW-TO:带有Spring MVC的Tomcat中的自定义错误页面
默认的Tomcat错误页面看起来很可怕. 此外,它们可能会公开有价值的信息,包括服务器版本和异常堆栈跟踪. Servlet规范提供了一种通过web.xml配置异常行为的方法. 可以配置对特定Java异 ...
- 如何在ASP.NET Core中创建自定义AuthorizeAttribute?
本文翻译自:How do you create a custom AuthorizeAttribute in ASP.NET Core? I'm trying to make a custom aut ...
- 在ASP.NET Core中创建自定义端点可视化图
在上篇文章中,我为构建自定义端点可视化图奠定了基础,正如我在第一篇文章中展示的那样.该图显示了端点路由的不同部分:文字值,参数,动词约束和产生结果的端点: 在本文中,我将展示如何通过创建一个自定义的D ...
- IE下不显示自定义错误页面
IIS的通配符要映射到aspnet_isapi.dll .当敲入不合法的URL时,比如: http://www.xxx.com/sdfsdfsdfsdfs ,我们的web.config 定义了 < ...
- ASP.NET Core 中的管道机制
首先,很感谢在上篇文章 C# 管道式编程 中给我有小额捐助和点赞的朋友们,感谢你们的支持与肯定.希望我的每一次分享都能让彼此获得一些收获,当然如果我有些地方叙述的不正确或不当,还请不客气的指出.好了, ...
- ASP.NET Core 中文文档 第三章 原理(5)错误处理
原文:Error Handling 作者:Steve Smith 翻译:谢炀(Kiler) 校对:高嵩(jack2gs).何镇汐 当你的ASP.NET应用发生错误的时候, 你可以采用本文所述的各种方法 ...
- ASP.NET自定义错误页面(转)
ASP.NET自定义错误页面(转) ASP.NET 提供三种用于在出现错误时捕获和响应错误的主要方法:Page_Error 事件.Application_Error 事件以及应用程序配置文件 (Web ...
最新文章
- 【无标题】ubuntu20.04 开机引导后黑屏 光标闪现 无法进入图形桌面的解决方案_Denis.Zzzzzzzz?的博客-CSDN博客_ubuntu20黑屏光标闪烁
- 339所!中国内地高校ESI排名出炉:国科大、清华、北大位列前三!
- 大整数乘法(POJ2389)
- 元素的层次结构和HTML文档结构
- 查看 PHP apache nginx mysql 是如何编译的
- OpenGL入门-2-颜色
- java简单功能测试,java 自动化测试小功能集锦
- 快手与2020央视春晚达成独家互动合作:大年三十发红包
- Spring with Hibernate persistence and transactions
- HADOOP docker(六):hive简易使用指南
- Media Queries语法总结
- buuctf--CrackRTF
- WWF中Conditioned Activity Group的子Activity扩展CAG的WhenCondition属性代码解析
- 数据中台在企业数字化转型中的践行(下篇)
- 数据分析/运营——数据异常的排查方法
- FCN训练自己数据集(person-segmentation)、SIFT-FLOW、SBD和VOC实验总结
- 对技术的态度/编程修养(上)
- Maven | filtering,filter和profile标签使用
- iOS-中集成百度echarts3-0
- python load 和loads 区别
热门文章
- ElementUI的DateTimePicker组件添加验证规则以及限制选择范围
- MySQL高级-索引是个什么东西?explain到底怎么用-MySQL查询优化大全
- shell脚本传递参数,并且判断参数是否为空
- 需求用例分析之三:补充规约
- 找不到 tools.jar。请检查 C:\Program Files\Java\jre1.8.0_151 是否包含有效的 JDK 安装
- 审计文件的作用以及记录的内容,审计日志的记录,以及审计日志包括的内容
- 5、ShardingSphere 之 公共表
- 神策用户画像 2 大功能:千人千面,一人千面,一次给你
- 货拉拉携手神策数据,数据赋能企业,实现多元颠覆式创新
- 利用 Rize 来进行 UI 测试或 E2E 测试