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 开发人员异常页面的更多相关文章

  1. ASP.Net Core中处理异常的几种方法

    本文将介绍在ASP.Net Core中处理异常的几种方法 1使用开发人员异常页面(The developer exception page) 2配置HTTP错误代码页 Configuring stat ...

  2. ASP.Net Core开发(踩坑)指南

    ASP.NET与ASP.NET Core很类似,但它们之间存在一些细微区别以及ASP.NET Core中新增特性的使用方法,在此之前也写过一篇简单的对比文章ASP.NET MVC应用迁移到ASP.NE ...

  3. 【ASP.NET Core】处理异常--转

    老周写的[ASP.NET Core]处理异常非常的通俗易懂,拿来记录下. 转自老周:http://www.cnblogs.com/tcjiaan/p/8461408.html 今天咱们聊聊有关异常处理 ...

  4. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

  5. [ASP.NET Core开发实战]基础篇01 Startup

    Startup,顾名思义,就是启动类,用于配置ASP.NET Core应用的服务和请求管道. Startup有两个主要作用: 通过ConfigureServices方法配置应用的服务.服务是一个提供应 ...

  6. ASP.NET Core 中的 Razor 页面介绍

    标题:ASP.NET Core 中的 Razor 页面介绍 地址:https://docs.microsoft.com/zh-cn/aspnet/core/razor-pages/index?view ...

  7. 图解 ASP.NET Core开发环境准备

    2016年6月28日微软宣布发布 .NET Core 1.0.ASP.NET Core 1.0 和 Entity Framework Core 1.0. .NET Core是微软在两年前发起的开源跨平 ...

  8. 2月送书福利:ASP.NET Core开发实战

    大家都知道我有一个公众号“恰童鞋骚年”,在公众号2020年第一天发布的推文<2020年,请让我重新介绍我自己>中,我曾说到我会在2020年中每个月为所有关注“恰童鞋骚年”公众号的童鞋们送一 ...

  9. 《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发

    <ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...

随机推荐

  1. Winform中设置ZedGraph的X轴的刻度根据曲线获取

    场景 Winforn中设置ZedGraph曲线图的属性.坐标轴属性.刻度属性: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  2. elasticsearch ik同义词

    由于elasticsearch 更新实在太快,配置同义词的资料层次不齐,费尽千辛万苦终于找到了.本文通过一个同义词搜索的简单实例来说明ik同义词的配置. 环境介绍 这点很重要,本文是基于elastic ...

  3. iOS音频与视频的开发(一)-使用AVAudioPlayer播放音乐、使用AVPlayerViewController播放视频

    iOS的多媒体支持非常强大,它提供了多套支持多媒体的API,无论是音频.视频的播放,还是录制,iOS都提供了多种API支持.借助于这些API的支持,iOS应用既可以查看.播放手机相册中的照片.视频,也 ...

  4. curl http libcurl 功能使用

    /* * This example shows a HTTP PUT operation. PUTs a file given as a command * line argument to the ...

  5. tomcat配置通过域名访问项目

    tomcat配置通过域名访问项目,是修改conf/server.xml里面的配置信息实现.具体如下: (1)修改Connector节点的port属性值 <Connector port=" ...

  6. ABP进阶教程9 - CSV导出中文乱码

    点这里进入ABP进阶教程目录 问题描述 功能按钮 - 导出CSV,中文信息导出为乱码. 解决方案 打开展示层(即JD.CRS.Web.Mvc)的\wwwroot\view-resources\View ...

  7. Weblogic的三种部署方式

    Weblogic的三种部署方式     在weblogic中部署项目通常有三种方式:第一,在控制台中安装部署:第二,将部署包放在domain域中autodeploy目录下部署:第三,使用域中配置文件c ...

  8. CodeForces - 1251C (思维+贪心+归并排序)

    题意 https://vjudge.net/problem/CodeForces-1251C 一个字符串,相邻的偶数奇数不能交换位置,其他相邻的情况可以交换,问字符串代表的数最小是多少. 思路 相邻的 ...

  9. 初学JavaScript正则表达式(十二)

    text / exec方法 text() var reg1 = /\w/; var reg2 = /\w/g; reg1.test('a') === true reg2.test('a') === t ...

  10. hdu6470 矩阵快速幂+构造矩阵

    http://acm.hdu.edu.cn/showproblem.php?pid=6470 题意 \(f[n]=2f[n-2]+f[n-1]+n^3,n \leq 10^{18}\),求f[n] 题 ...