ASP.NET Core 开发人员异常页面
usedeveloperexceptionpage 中间件
我们谈谈在 startup 类的 configure()方法中以下代码:
public void configure(iapplicationbuilder app, ihostingenvironment env) { if (env.isdevelopment()) { app.usedeveloperexceptionpage(); } app.usefileserver(); app.run(async (context) => { throw new exception("您的请求在管道中发生了一些异常,请检查。"); await context.response.writeasync("hello world!"); }); }
如果我们使用上面的代码运行我们的应用程序,我们看不到异常,而是看到“来自 default.html 页面中的 hello”。如果您了解 asp.net core 请求处理管道的工作原理,那么您可能已经知道我们没有看到我们抛出的异常的原因。
usefileserver
中间件结合了usedefaultfiles
和usestaticfiles
中间件的功能。在我们之前的系列视频中,我们在 wwwroot 文件夹中包含了一个名为default.html
的默认 html 文档。
因此,对应用程序根 url 的请求即http://localhost:49119
由usefileserver
处理中间件和管道从那里反转。因此,在我们run()
方法注册的请求管道中的下一个中间件也无法执行,因此我们不会看到此中间件抛出的异常。
现在,如果我们向http://localhost:49119/abc.html
发出请求,我们会看到异常。因为,在这种情况下,usefileserver
中间件找不到名为abc.html
的文件。 它会继续去调用管道中的下一个中间件,在我们的例子中是我们使用run()
方法注册的中间件。此中间件抛出异常,我们按预期看到异常详细信息。
如果您对传统的 asp.net 有任何经验,那么您必须非常熟悉此页面。这类似于传统的 asp.net 中的黄色死亡屏幕。
此developer exception
页面包含异常详细信息 :
- 堆栈跟踪,包括导致异常的文件名和行号
- query string, cookies 和 http headers
目前,在异常页面的“query ”选项卡上,我们看到“无 querystring 数据”。如果请求 url 中有任何查询字符串参数,如下所示,您将在“query ”选项卡下看到它们。
http://localhost:48118/abc.html?country=person&state=islocked
自定义 usedeveloperexceptionpage 中间件
与 asp.net core 中的大多数其他中间件组件一样,我们也可以自定义usedeveloperexceptionpage
中间件。每当您想要自定义中间件组件时,请始终记住您可能拥有相应的options对象
。那么,要自定义usedeveloperexceptionpage
中间件,
developerexceptionpageoptions developerexceptionpageoptions = new developerexceptionpageoptions { sourcecodelinecount = 10 }; app.usedeveloperexceptionpage(developerexceptionpageoptions);
sourcecodelinecount
属性指定在导致异常的代码行之前和之后要包含的代码行数。
usedeveloperexceptionpage 中间件如何工作
usedeveloperexceptionpage
中间件的位置尽可能的放置在其他中间件的位置前面,因为如果管道中的后面的中间件组件引发异常,它可以处理异常并显示developer exception
页面。请参考以下代码:使用 run()注册的中间件后出现usedeveloperexceptionpage()
中间件方法。因此,在这种情况下,将不会显示开发人员异常页面。这就是它必须尽早的放置在请求处理管道的原因。
public void configure(iapplicationbuilder app, ihostingenvironment env) { //app.usefileserver(); app.run(async (context) => { throw new exception("some error processing the request"); await context.response.writeasync("hello world!"); }); if (env.isdevelopment()) { developerexceptionpageoptions developerexceptionpageoptions = new developerexceptionpageoptions { sourcecodelinecount = 10 }; app.usedeveloperexceptionpage(developerexceptionpageoptions); } }
欢迎添加个人微信号:like若所思。
欢迎关注我的公众号,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步!
推荐阅读
-
Asp.net Core全局异常监控和记录日志
-
ASP.NET Core异常和错误处理(8)
-
创建基于ASP.NET core 3.1 的RazorPagesMovie项目(三)-已搭建基架的Razor页面解释和更新
-
在ASP.NET Core中显示自定义的错误页面
-
【ASP.NET Core学习】Razor页面
-
学习ASP.NET Core Razor 编程系列十二——在页面中增加校验
-
ASP.NET CORE 学习之自定义异常处理
-
Asp.net core中由于页面编码导致的中文乱码
-
ASP.NET Core ActionFilter引发的一个EF异常
-
学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面