专栏首页角落的白板报ASP.NET Core开发人员异常页面-13

ASP.NET Core开发人员异常页面-13

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中间件结合了UseDefaultFilesUseStaticFiles中间件的功能。在我们之前的系列视频中,我们在 wwwroot 文件夹中包含了一个名为default.html的默认 html 文档。

因此,对应用程序根 URL 的请求即http://localhost:49119UseFileServer处理中间件和管道从那里反转。因此,在我们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);
    }
}

声明专区

如果您觉得我的文章质量还不错,欢迎打赏,也可以订阅我的视频哦 未得到授权不得擅自转载本文内容,52abp.com保留版权 文字版目录:https://www.52abp.com/Wiki/mvc/latest/1.Intro 交流QQ群:952387474《微软MVP带你学ASP.NET CORE》 视频课程: https://ke.qq.com/course/392589?tuin=2522cdf3

本文分享自微信公众号 - 角落的白板报(jiaoluodebaibanbao),作者:梁桐铭

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 中间件是什么?在.NET Core中的工作原理又是怎样的呢?10

    在这个视频中,我们将了解,ASP.NET Core 中的中间件是 什么?中间件很重要,尤其是在你想当架构师这一条路上。

    角落的白板报
  • 在 ASP.NET Core 中安装 MVC

    到目前为止,我们在本系列视频中使用的 ASP.NET Core 项目是使用“空”项目模板生成的。目前这个项目没有设置和安装 MVC。

    角落的白板报
  • Asp.Net Core中的静态文件-12

    在这个视频中我们将讨论如何使 ASP.NET Core 应用程序,支持静态文件,如 HTML,图像,CSS 和 JavaScript 文件。

    角落的白板报
  • 谈谈中间件开发,给想从事中间件开发的同学

    随着国内软件行业的发展,国内互联网公司规模越来越大,业务越来越复杂,随之使用大量的中间件来提高后台服务性能。由此产生了中间件开发和维护人员。

    芋道源码
  • mysql分布式数据库中间件对比mysql分布式数据库中间件对比

    mysql分布式数据库中间件对比 目前数据库中间件有很多,基本这些中间件在下都有了解和使用,各种中间件优缺点及使用场景也都有些心的。所以总结一个关于中间件比较的...

    Albert陈凯
  • JavaScript 设计模式学习第二十九篇- 中间件

    (Middleware),又称中介层,是提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通,特别是应用软件对于系统软件的集中的逻辑。中间件在企业架...

    越陌度阡
  • 浅谈Laravel中的三种中间件的作用

    在之前一直简单的认为中间件就是往middleware里添加中间件即可。现在才知道中间件有三种类型,分别为:middleware middlewareGroup

    砸漏
  • 爬虫框架scrapy之中间件

    中间件是Scrapy里面的一个核心概念。使用中间件可以在爬虫的请求发起之前或者请求返回之后对数据进行定制化修改,从而开发出适应不同情况的爬虫。

    菲宇
  • What?Tomcat 竟然也算中间件?

    本来今天就该讲 MyCat 了,但是我发现还有一个概念值得和大家聊一下,那就是 Java 中间件!

    江南一点雨
  • 系统架构师论文-论中间件在SIM卡应用开发中的作用

    我曾于近期参与过一个基于SIM卡应用的开发项目,并在项目中担任系统分析的工作。在分析过程中,我们依据面向対象方法対系统进行了划分,其中许多的模块已有成熟的中间件...

    cwl_java

扫码关注云+社区

领取腾讯云代金券