zoukankan      html  css  js  c++  java
  • 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项目属性中自定义环境变量。如下
    env

    将ASPNET_ENV 设置任何非Development的值,应用都不会调用UseDeveloperExceptionPage方法,而是返回500错误(没有任何详细信息,除非你配置了UseExceptionHandler())。
    在下面我们会看到error page所提供的特性(确保ASPNET_ENV被设置回Development)。

    在开发中使用error page##

    在web处理管道中发生未处理异常时,默认error page会显示一些有用的诊断信息。error page有几个tab来显示请求中异常相关的信息。第一个tab显示stack trace
    stack trace

    第二tab显示Querystring 相关的信息
    querystring
    如上,你可以看到请求中传递的throw参数的值。本次请求没有cookie,如果有的话,会在Cookies tab中。你可以看到传递的headers的值,如下。
    headers

    Note: 当前pre-release版本,ErrorPage的Cookies部分还不可用。详见ErrorPage Source

    Azure上的Http 500错误##

    运行时info page##

    除了配置和显示错误页面外,你也可以通过调用扩展方法UseRuntimeInfoPage来添加运行时信息页面。如下代码,就可以开启该功能。

    app.UseRuntimeInfoPage();
    

    一旦添加了如上代码,你就可以输入/runtimeinfo来查看运行时信息、包信息等。如下。
    info

    当然这个请求路径是可以更改的,你可以在调用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页面(默认情况下)。如下。
    welcome

    你也可以配置欢迎页面只响应某些路径(和UseRuntimeInfoPage类似)。如下代码配置了欢迎页面只响应/welcome路径(别的请求路径将会忽略,转交给下个管道handler)。

    app.UseWelcomePage("/welcome");
    

    按照本文如上配置Configure方法,将会按如下方式响应请求。

    Path Result
    /runtimeinfo UseRuntimeInfoPage will handle and display runtime info page
    /welcomeUseWelcomePage 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信息,或者简单的响应一个欢迎页面。

  • 相关阅读:
    Android 图片文字单位 px、dp、sp区别
    替换Fragment 报错 The specified child already has a parent. You must call removeView() on the child's parent first.
    Android 程序怎么打log
    Android 启动项 Activity
    Actiivity 生命周期
    Oracle 监听/数据库 启动/关闭
    【HDU-2049】不容易系列之(4)——考新郎
    Linux内存子系统——Locking Pages(内存锁定)
    command三国杀开发日记20200915
    command三国杀开发日记20200914
  • 原文地址:https://www.cnblogs.com/yanbinliu/p/5173206.html
Copyright © 2011-2022 走看看