ASP.NET Core 1.0基础之诊断
来源https://docs.asp.net/en/latest/fundamentals/diagnostics.html
ASP.NET Core 1.0包含了一些新的特性来辅助诊断问题。可以在Startup类中轻易地配置不同的handler来处理应用程序错误,显示额外信息。
配置错误处理页面##
ASP.NET Core 1.0中可以在Startup类的Configure方法中为每个Request请求配置处理管道。在开发中,你可以非常方便地配置一个简单的错误处理页面。你只需要添加项目对Microsoft.AspNet.Diagnostics的依赖,然后在Configure方法中添加一行代码。
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Diagnostics;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using System;
using Microsoft.Extensions.DependencyInjection;
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.UseDeveloperExceptionPage();
app.UseRuntimeInfoPage(); // default path is /runtimeinfo
}
else
{
// specify production behavior for error handling, for example:
// app.UseExceptionHandler("/Home/Error");
// if nothing is set here, exception will not be handled.
}
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 Core 1.0中的空模板中创建的,只包含了简单异常处理产生机制(在36行)。如果querystring的“throw” key的值不为空,就会抛出异常。然后会调用21行的UseDeveloperExceptionPage方法,来调用中间件。
注意到调用UseDeveloperExceptionPage在包含在if代码块中间的,会先检查当前环境。这是很好的实践方式,因为你可能不愿意在生产环境中公开展示程序诊断信息。if语句会使用ASPNET_ENV环境变量,如果你使用的VS2015,你可以在web项目属性中自定义环境变量。如下

将ASPNET_ENV 设置任何非Development的值,应用都不会调用UseDeveloperExceptionPage方法,而是返回500错误(没有任何详细信息,除非你配置了UseExceptionHandler())。
在下面我们会看到error page所提供的特性(确保ASPNET_ENV被设置回Development)。
在开发中使用error page##
在web处理管道中发生未处理异常时,默认error page会显示一些有用的诊断信息。error page有几个tab来显示请求中异常相关的信息。第一个tab显示stack trace

第二tab显示Querystring 相关的信息

如上,你可以看到请求中传递的throw参数的值。本次请求没有cookie,如果有的话,会在Cookies tab中。你可以看到传递的headers的值,如下。

Note: 当前pre-release版本,ErrorPage的Cookies部分还不可用。详见ErrorPage Source。
Azure上的Http 500错误##
略
运行时info page##
除了配置和显示错误页面外,你也可以通过调用扩展方法UseRuntimeInfoPage来添加运行时信息页面。如下代码,就可以开启该功能。
app.UseRuntimeInfoPage();
一旦添加了如上代码,你就可以输入/runtimeinfo来查看运行时信息、包信息等。如下。

当然这个请求路径是可以更改的,你可以在调用UseRuntimeInfoPage()方法时指定。这个方法接收一个 RuntimeInfoPageOptions实例作为参数,它有一个Path属性。例如,指定/info路径,你可以像如下调用UseRuntimeInfoPage。
app.UseRuntimeInfoPage("/info")
同UseDeveloperExceptionPage()扩展方法一样,限制公共对诊断信息的获取。因此本例中,值在开发环境中调用UseRuntimeInfoPage()方法。
Note:记住Startup类中的Configure方法定义的管道对所有的请求都是有效的,因此管道配置顺序是很重要的。例如,如果你把UseRuntimeInfoPage()的调用放在app.Run()之后,则该方法是不会被调用的。因为app.Run会在调用UseRuntimeInfoPage之前处理请求。
welcome页面##
另一个有用的扩展方法是UseWelcome(),尤其是你在第一次运行ASP.NET Core 1.0程序时。配置如下。
app.UseWelcome()
一旦调用该方法,它会处理所有请求,并返回很cool的hello页面(默认情况下)。如下。

你也可以配置欢迎页面只响应某些路径(和UseRuntimeInfoPage类似)。如下代码配置了欢迎页面只响应/welcome路径(别的请求路径将会忽略,转交给下个管道handler)。
app.UseWelcomePage("/welcome");
按照本文如上配置Configure方法,将会按如下方式响应请求。
| Path | Result |
|---|---|
| /runtimeinfo | UseRuntimeInfoPage will handle and display runtime info page |
| /welcome | UseWelcomePage will handle and display welcome page |
| paths without ?throw= | app.Run() will respond with “Hello World!” |
| paths with ?throw= | app.Run() throws an exception; UseErrorPage handles, displays an error page |
Summary##
在ASP.NET Core 1.0中,你可以很简单的添加error page,查看diagnostic信息,或者简单的响应一个欢迎页面。
ASP.NET Core 1.0基础之诊断的更多相关文章
- ASP.NET Core 1.0 基础与应用启动
.NET Core http://dotnet.github.io/[https://github.com/dotnet/coreclr] ASP.NET Core 1.0 https://get.a ...
- ASP.NET Core 1.0基础之依赖注入
来源https://docs.asp.net/en/latest/fundamentals/dependency-injection.html ASP.NET Core 1.0在设计上原生就支持和 ...
- ASP.NET Core 1.0 基础之配置
来源https://docs.asp.net/en/latest/fundamentals/configuration.html ASP.NET Core 1.0支持不同的配置选项.应用配置数据可以是 ...
- ASP.NET Core 1.0基础之日志
过年出去玩了一圈,回来继续翻译.前两天偷懒没有翻译,只是转了两篇C# 7计划中的新features,大家还是很支持的.现在继续完善这个系列. 来源https://docs.asp.net/en/lat ...
- ASP.NET Core 1.0基础之应用启动
来源https://docs.asp.net/en/latest/fundamentals/startup.html ASP.NET 5 使得应用对每个http请求有完整的控制权.Startup类是程 ...
- ASP.NET Core 1.0基础之静态文件处理
来源 这些HTML , CSS files, image files, 和JavaScript这些静态文件,是ASP.NET能够直接响应给客户端的.本文详述下ASP.NET和静态文件的关系. Serv ...
- 从头编写 asp.net core 2.0 web api 基础框架 (1)
工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...
- 【转载】从头编写 asp.net core 2.0 web api 基础框架 (1)
工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相 ...
- 从头编写asp.net core 2.0 web api 基础框架 (5) + 使用Identity Server 4建立Authorization Server (7) 可运行前后台源码
前台使用angular 5, 后台是asp.net core 2.0 web api + identity server 4. 从头编写asp.net core 2.0 web api 基础框架: 第 ...
随机推荐
- JVM 性能排查 自己做的笔记
Live Memory 1.Class Tracker 展示类或包的实例个数与时间的关系.需要录制才可以看到. 1)可以添加指定的类或包. 2.All Objects 查看所有类的实例个数和大小.可以 ...
- [NOIP2017]列队 (Splay)
题目链接 NOIP2017真的是不按常理出牌: 1.数学题不在Day2T1 2.一道水题一道细节极多的模拟题一道不知道怎么形容的题(小凯的疑惑)(因为我太菜了) 3.3道大火题 当时看到列队这题是毫无 ...
- bzoj 1051 tarjan强连通分量
2013-11-16 11:39 原题传送门http://www.lydsy.com/JudgeOnline/problem.php?id=1051 强连通分量,缩完点之后看出度为0的强连通分量有几个 ...
- mysql 表的类型
MySQL 数据表主要支持六种类型 ,分别是:BDB.HEAP.ISAM.MERGE.MYISAM.InnoBDB. 这六种又分为两类,一类是”事务安全型”(transaction-safe),包括B ...
- (转)linux samb服务器配置
1. 首先安装samba服务. 2. 配置防火墙(要先关闭) 3. 创建samba服务器用户:smbpasswd -a username 删除samba服务器用户:smbpasswd -x u ...
- 用Golang自己构造ICMP数据包
ICMP是用来对网络状况进行反馈的协议,可以用来侦测网络状态或检测网路错误. 限于当前Golang在网络编程方面的代码稀缺,资料甚少,所以分享一个用Golang来构造ICMP数据包并发送ping程序的 ...
- [Leetcode Week4]Merge Two Sorted Lists
Merge Two Sorted Lists题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/merge-two-sorted-lists/descrip ...
- container_of分析--可用good【转】
转自:http://blog.csdn.net/tigerjibo/article/details/8299589 版权声明:本文为博主原创文章,未经博主允许不得转载. 1.container_of宏 ...
- linux system函数分析
system函数是在应用编程里面想调用外部命令时最方便的方式了,除非想要获取命令行执行的输出信息, 那system就不行了,需要用popen.但是system内部具体怎么实现及怎么处理它的返回值经常被 ...
- [ Python - 3 ] python3.5中不同的读写模式
r 只能读.r+可读可写,不会创建不存在的文件.如果直接写文件,则从顶部开始写,覆盖之前此位置的内容,如果先读后写,则会在文件最后追加内容.w+ 可读可写 如果文件存在 则覆盖整个文件不存在则创建w ...