欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-03 13:58:16
UseDeveloperExceptionPage 中间件 我们谈谈在 Startup 类的 Configure()方法中以下代码: 如果我们使用上面的代码运行我们的应用程序,我们看不到异常,而是看到“来自 Default.html 页面中的 Hello”。如果您了解 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);
    }
}

 

欢迎添加个人微信号:like若所思。

欢迎关注我的公众号,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步!

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