美文网首页微软MVP带你...
ASP.NET Core开发异常页面

ASP.NET Core开发异常页面

作者: 角落的白板笔 | 来源:发表于2019-05-05 13:32 被阅读3次

    目录

    本文出自《从零开始学 ASP.NET CORE MVC》目录 </br>
    视频课程效果更佳:从零开始学 Asp.Net Core MVC </br>
    推荐文章: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中间件结合了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);
        }
    }
    

    文章说明

    如果您觉得我的文章质量还不错,欢迎打赏,也可以订阅我的视频哦 </br>
    未得到授权不得擅自转载本文内容,52abp.com 保留版权 </br>
    【收费】腾讯课堂:https://ke.qq.com/course/392589?tuin=2522cdf3 </br>
    【免费】youtube 视频专区:http://t.cn/Ei0F2EB </br>
    感谢您对我的支持

    关注微信公众号:角落的白板报

    公众号:角落的白板报

    相关文章

      网友评论

        本文标题:ASP.NET Core开发异常页面

        本文链接:https://www.haomeiwen.com/subject/rtxriqtx.html