在新建一个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. 随笔记录--RegExp类型

    阅读Javascript高级程序设计第五章 -- RegExp类型总结 对于基础教程部分, 有小伙伴不熟悉的,可以参考 正则表达式 - 教程 1. 基础部分回顾: ECMASript通过RegExp类 ...

  2. pycharm Launching unittests with arguments

    在运行程序时出现 但是代码没有错 源代码是: 这是运行时启动了测试 解决方法: File-> Settings -> Tools -> Python Integrated Tools ...

  3. 【JavaScript】案例三:使用JS完成页面定时弹出广告——事件(onload)

     事件(onload) *注意点: 变量加var局部变量,不加var全局变量 setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭. 返回值:返回 ...

  4. Nginx对图片进行防盗链

    这里需要使用两台Linux主机(一台充当防盗链服务器,一台充当盗链服务器),下表是它们所使用的操作系统以及IP地址. 两台Linux主机所使用的操作系统以及IP地址 主机名称 操作系统 IP地址 防盗 ...

  5. centos7下搭建JDK和Hadoop

    涉及基础操作命令 这里只是将涉及到的提了下一下具体的使用还需要读者自己查阅资料 tar 解压命令 su 进入root用户模式 rm -rf 删除 cd /文件名/.../ 进入某个文件夹下 注意要逐层 ...

  6. 第二章 linux不为人知的命令

    文件和目录命令 cd /home 进入 home目录' cd ..返回上一级目录 pwd显示当前工作路径 ls查看目录中的文件 ls -l 显示文件和目录的详细资料(可简写为ll),后可跟具体文件名 ...

  7. 编程语言及python介绍

    编程语言及python介绍 1.编程语言分类 机器语言 优点:执行效率高 缺点:开发效率极低,跨平台性差 汇编语言 优点:较机器语言执行效率稍低 缺点:较机器语言开发效率稍高,仍然很低,跨平台性差 高 ...

  8. 【reactNative 大杂烩 好文章汇总 】

    1. React Native之打包 https://blog.csdn.net/xiangzhihong8/article/details/70162784

  9. Python面向对象 | isinstance和issubclass

    isinstance(a,b):判断a是否是b类(或者b类的基类)实例化的对象 class A: pass class B(A): pass obj = B() print(isinstance(ob ...

  10. three.js 离线API