在新建一个ASP.NET Core项目后,在项目Startup类的Configure方法中默认会添加两个方法的调用,app.UseDeveloperExceptionPage和app.UseExceptionHandler,如下所示:

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
} app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}

其实app.UseDeveloperExceptionPage方法就是在告诉ASP.NET Core,当代码发生异常错误后,在浏览器上显示异常错误信息页,也就是我们在开发代码时,经常看到的异常错误信息页:

该异常错误信息页返回的HTTP状态码为500

但是我们可以看到app.UseDeveloperExceptionPage方法,是写在if (env.IsDevelopment())这个条件里面的,所以当只有在开发环境下,ASP.NET Core才会显示上面的异常错误信息页,而在其它环境下(例如ASP.NET Core项目发布后所处的生产环境),会执行app.UseExceptionHandler方法,该方法会传递一个URL地址,本例中我们传递的就是"/Home/Error":

app.UseExceptionHandler("/Home/Error");

也就是说在非开发环境下,ASP.NET Core项目中有代码发生异常后,ASP.NET Core会将"/Home/Error"这个URL地址的页面内容呈现到客户端浏览器上,而"/Home/Error"是一个自定义的MVC视图页面,你可以定义任何想显示的内容,在这里我们只显示一个错误提示"后台代码发生错误!",以下是视图文件"Error.cshtml"的内容:

@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Error</title>
</head>
<body>
<h1>后台代码发生错误!</h1>
</body>
</html>

注意当使用app.UseExceptionHandler方法,将用户HTTP请求转向"/Home/Error"这个URL地址后,在HomeController的Error方法中,HTTP请求的默认状态就已经变为500了:

当然这里,我们也可以在HomeController的Error方法中,通过Response.StatusCode属性将其改为其它状态码。

最终呈现在客户端浏览器上的页面,就是我们在前面定义的视图文件"Error.cshtml":

所以app.UseDeveloperExceptionPage和app.UseExceptionHandler两个方法,都是用来定义ASP.NET Core项目有代码发生异常后,给客户端浏览器显示什么页面的,只不过app.UseDeveloperExceptionPage方法用于开发环境,ASP.NET Core会自动生成一个异常显示页面,而app.UseExceptionHandler方法用于非开发环境,并且需要我们自己定义异常显示页面。

ASP.NET Core中app.UseDeveloperExceptionPage和app.UseExceptionHandler方法有什么用的更多相关文章

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

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

  2. 在ASP.NET Core中构建路由的5种方法

    原文链接 :https://stormpath.com/blog/routing-in-asp-net-core 在ASP.NET Core中构建路由的5种方法 原文链接 :https://storm ...

  3. C#调用接口注意要点 socket,模拟服务器、客户端通信 在ASP.NET Core中构建路由的5种方法

    C#调用接口注意要点   在用C#调用接口的时候,遇到需要通过调用登录接口才能调用其他的接口,因为在其他的接口需要在登录的状态下保存Cookie值才能有权限调用, 所以首先需要通过调用登录接口来保存c ...

  4. ASP.NET Core中,UseDeveloperExceptionPage扩展方法会吃掉异常

    在ASP.NET Core中Startup类的Configure方法中,有一个扩展方法叫UseDeveloperExceptionPage,如下所示: // This method gets call ...

  5. ASP.NET Core 中文文档 第三章 原理(1)应用程序启动

    原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程 ...

  6. ASP.NET Core 中文文档 第三章 原理(11)在多个环境中工作

    原文: Working with Multiple Environments 作者: Steve Smith 翻译: 刘浩杨 校对: 孟帅洋(书缘) ASP.NET Core 介绍了支持在多个环境中管 ...

  7. Asp.net Core中SignalR Core预览版的一些新特性前瞻,附源码(消息订阅与发送二进制数据)

    目录 SignalR系列目录(注意,是ASP.NET的目录.不是Core的) 前言 一晃一个月又过去了,上个月有个比较大的项目要验收上线.所以忙的脚不沾地.现在终于可以忙里偷闲,写一篇关于Signal ...

  8. ASP.NET CORE中使用Cookie身份认证

    大家在使用ASP.NET的时候一定都用过FormsAuthentication做登录用户的身份认证,FormsAuthentication的核心就是Cookie,ASP.NET会将用户名存储在Cook ...

  9. ASP.NET Core中使用GraphQL - 第六章 使用EF Core作为持久化仓储

    ASP.NET Core中使用GraphQL ASP.NET Core中使用GraphQL - 第一章 Hello World ASP.NET Core中使用GraphQL - 第二章 中间件 ASP ...

随机推荐

  1. rocketmq 使用中碰到的一些问题

    1.rocket 入门使用 http://rocketmq.apache.org/docs/quick-start/ 2.内存不够 默认配置内存配置比较高,在测试环境启动会有问题因此需要调整默认的内存 ...

  2. 配置管理-git研究(版本管理)

    1. 安装git2.7 git2.7具体安装步骤如下: [root@host1 ~]# yum install curl-devel expat-devel gettext-devel openssl ...

  3. php访问者模式(visitor design)

    终于搞定,累成一滩,今晚不想说话. <?php /* The visitor design pattern is a way of separating an algorithm from an ...

  4. xdvipdfmx:fatal: Unable to open "xxx.pdf". Output file removed. fwrite: Broken pipe xelatex.exe

    解决方法: 关闭外部PDF阅读器,重新编译运行下就好了. 参考:https://github.com/James-Yu/Atom-LaTeX/issues/109

  5. vuex相关

    作用:对项目里多个组件的共享状态进行集中式管理(读/写) .

  6. request.user怎么来的

    1.登录认证(auth认证登录后login后设置了session等信息包含用户的pk)      >>>>>               2.用户再次请求登录的时候,通过 ...

  7. 前端之CSS(上)

    CSS CSS 简介 ## CSS介绍 CSS(Cascading Style Sheet,层叠样式表)定义如何显示HTML元素. 当浏览器读到一个样式表,它就会按照这个样式表来对文档进行格式化(渲染 ...

  8. mysql命令查询语句&MTdata

    1.单表查询 select * from student; 采用*效率低,不推荐,多用列名 一.单表查询的语法: SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY ...

  9. LeetCode 1123. Lowest Common Ancestor of Deepest Leaves

    原题链接在这里:https://leetcode.com/problems/lowest-common-ancestor-of-deepest-leaves/ 题目: Given a rooted b ...

  10. Vue 生成PDF并下载

    实现原理 该功能原理是将页面转化伟canvas在把canvas转化为base64数据 最后将数据通过pdf.js生成下载,故需要和html2canvas一起使用 友情提醒这个pdf下载不能在app里直 ...