ASP.NET 5 之 错误诊断和它的中间件们
ASP.NET5包含若干个新的功能来辅助诊断错误,可以在Startup类中简单的为应用程序错误配置不同的处理程序或者显示关于应用程序的附加信息。
配置错误处理页面
在ASP.NET5中,在Startup类中的Configure方法中为每一个请求配置处理管道,你可以非常简单的添加一个简单的错误页面让它只工作在development环境,所有的这些只需要为项目添加一个Microsoft.AspNet.Diagnostics依赖,并且在Startup类中添加一行代码:

using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Diagnostics;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.Framework.DependencyInjection;
using System; namespace DiagDemo
{
public class Startup
{
// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (string.Equals(env.EnvironmentName, "Development", StringComparison.OrdinalIgnoreCase))
{
app.UseErrorPage(); app.UseRuntimeInfoPage(); // default path is /runtimeinfo
}
else
{
// specify production behavior for error handling, for example:
// app.UseErrorHandler("/Home/Error");
// if nothing is set here, web server error page will be displayed
} app.UseWelcomePage("/welcome"); app.Run(async (context) =>
{
if(context.Request.Query.ContainsKey("throw")) throw new Exception("Exception triggered!");
context.Response.ContentType = "text/html";
await context.Response.WriteAsync("<html><body>Hello World!");
await context.Response.WriteAsync("<ul>");
await context.Response.WriteAsync("<li><a href=\"/welcome\">Welcome Page</a></li>");
await context.Response.WriteAsync("<li><a href=\"/?throw=true\">Throw Exception</a></li>");
await context.Response.WriteAsync("</ul>");
await context.Response.WriteAsync("</body></html>");
});
}
}
}
上文中的代码基于一个ASP.NET 空模板构建,包含一个简单抛出一个异常的简单机制,加入请求中包含一个非空的throw请求参数,那么将会抛出一个异常,在上文中我们使用了app.UseErrorPage()方法打开了错误页面中间件。
注意,我们调用UseErrorPage方法时使用了if条件判断当前的EnvironmentName值,这时一个不错的实践举措,因为你不会希望程序的Production阶段显示错误的详细信息给用户,这个方法检查了当前使用的ASP.NET_ENV环境变量,假如你使用Visual Studio 2015,你可以使用Web项目的属性面板的Debug选项卡中自定义你的环境变量:

将ASPNET_ENV设置为任何其它值(比如Prudction)将导致UseErrorPage方法不会再被调用,因而任何异常将会被下文中的页面显示:

我们将会在下一节使用错误页面的功能。
在Development阶段使用错误页面
当有在web处理管道中有一个未处理的异常发生是,默认的错误页面,将会显示一些对于诊断错误有用的信息,错误页面包含若干个选项卡,他们都展示一些关于异常的一些请求信息,第一个选项卡显示了调用堆栈:

第二个选项卡显示请求字符串的集合:

在这个示例中,你可以看到一个键为throw值为true的请求字符串,这个请求不包含任何Cookie,但是如果存在的话,它将显示在Cookie选项卡,下文是请求头的信息:

运行时信息页面
你也可以通过简单的调用app的UseRuntimeInfoPage方法添加一个运行时的信息页面:
app.UseRuntimeInfoPage(); // default path is /runtimeinfo
一旦添加了这个方法调用,你的浏览器会指定一个路径(/runtimeinfo)来显示一些关于运行时的信息和哪些包被包含在了应用程序中:

这个路径可以在调用UseRuntimeInfoPage时指定,这个方法接受一个RuntimeInfoPageOptions的对象作为参数,它包含一个Path属性,比如这样:
app.UseRuntimeInfoPage("/info");
和上文中使用UseErrorPage一样,应该使用对环境变量的判断来让运行时信息页面只在Development环境下显示。
注意,Startup类中的Configure方法调用顺序是非常重要的,假如你将UseRuntimeInfoPage的调用移动到了app.Run后面,那么这个运行时信息页面将永远不会显示
欢迎页面
另外一个有用的中间件是UseWelcomePage:
app.UseWelcomePage();
一旦添加了这段代码,你将会得到一个非常酷的Hello world页面,同样你也可以通过传入参数来指定它的路径:
app.UseWelcomePage("/welcome"));

原文地址:http://docs.asp.net/en/latest/fundamentals/diagnostics.html
ASP.NET 5 之 错误诊断和它的中间件们的更多相关文章
- ASP.NET Core 1.0中的管道-中间件模式
ASP.NET Core 1.0借鉴了Katana项目的管道设计(Pipeline).日志记录.用户认证.MVC等模块都以中间件(Middleware)的方式注册在管道中.显而易见这样的设计非常松耦合 ...
- ASP.NET Core中使用GraphQL - 第二章 中间件
前文:ASP.NET Core中使用GraphQL - 第一章 Hello World 中间件 如果你熟悉ASP.NET Core的中间件,你可能会注意到之前的博客中我们已经使用了一个中间件, app ...
- ASP.NET Core的JWT的实现(中间件).md
既然选择了远方,便只顾风雨兼程 __ HANS许 JWT(JSON Web Token) ASP.NET Core 的Middleware实现 引言:挺久没更新了,之前做了Vue的系列,后面想做做服务 ...
- Asp.Net Core 入门(三) —— 自定义中间件
上一篇我们讲了Startup文件,其中着重介绍了中间件,现在我们就来自定义我们自己的中间件吧. 中间件通常封装在一个类中,并使用扩展方法进行暴露.它需要拥有一个类型为RequestDelegate的成 ...
- 《ASP.NET Core 高性能系列》静态文件中间件
一.概述 静态文件(如 HTML.CSS.图片和 JavaScript等文件)是 Web程序直接提供给客户端的直接加载的文件. 较比于程序动态交互的代码而言,其实原理都一样(走Http协议), ASP ...
- [ASP.NET Core开发实战]基础篇03 中间件
什么是中间件 中间件是一种装配到应用管道,以处理请求和响应的组件.每个中间件: 选择是否将请求传递到管道中的下一个中间件. 可在管道中的下一个中间件前后执行. ASP.NET Core请求管道包含一系 ...
- ASP.NET MVC随想录——创建自定义的Middleware中间件
经过前2篇文章的介绍,相信大家已经对OWIN和Katana有了基本的了解,那么这篇文章我将继续OWIN和Katana之旅——创建自定义的Middleware中间件. 何为Middleware中间件 M ...
- ASP.NET Core 2.2 基础知识(二) 中间件
中间件是一种装配到应用管道以处理请求和相应的软件.每个软件都可以: 1.选择是否将请求传递到管道中的下一个组件; 2.可在调用管道中的下一个组件前后执行工作. 管道由 IApplicationBuil ...
- ASP.NET Core 中的那些认证中间件及一些重要知识点
前言 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 A ...
随机推荐
- 【freemaker】之eclipse安装freemaker-IDE
eclipse安装插件一般我喜欢手动安装,有种可控的感觉! 首先需要下载freemaker-IDEhttp://freemarker-ide.sourceforge.net/ 下载之后解压得到 在ec ...
- Linux常见设备及相应/dev/xxx文件名、Mount Point、挂载点、Mount命令、fstab、挂载分区
Linux 中的设备有2种类型:字符设备(无缓冲且只能顺序存取).块设备(有缓冲且可以随机存取).这些设备中,有些设备是对实际存在的物理硬件的抽象,而有些设备则是内核自身提供的功能(不依赖于特定的物理 ...
- 黄聪:WordPress固定链接设置的几种方法
wordpress固定链接设置的一些参数: %year%:基于文章发布的年份,比如2010: %monthnum%:基于文章发布的月份,比如01: %day%:基于文章发布当日,比如06: %hour ...
- DBA_Oracle Sort排序处理空间耗用(概念)
2014-12-18 Created By BaoXinjian
- KMP算法的Next数组详解 转
这个写的很好,还有讲kmp,值得一看. http://www.cnblogs.com/tangzhengyue/p/4315393.html 转载请注明来源,并包含相关链接. 网上有很多讲解KMP算法 ...
- python3-cookbook
http://python3-cookbook.readthedocs.io/zh_CN/latest/index.html 一般的类找方法,通过MRO找到第一个就停了对吧,可以描述器好像会顺着MRO ...
- Gerrit清单库配置(转载)
From:http://fatalove.iteye.com/blog/1340334 gerrit清单库是用来配合repo使用的.清单库中列出了gerrit服务器上的其他版本库. 客户端通过repo ...
- JAVA中集合输出的四种方式
在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello { public stat ...
- 使pre的内容自动换行
<pre> 元素可定义预格式化的文本.被包围在 pre 元素中的文本通常会保留空格和换行符.而文本也会呈现为等宽字体. <pre> 标签的一个常见应用就是用来表示计算机的源代码 ...
- glctx.ClearColor 参数说明
glctx.ClearColor 的参数信息如下: // ClearColor specifies the RGBA values used to clear color buffers. // // ...