ASP.NET Core 1.0ベースの診断

5314 ワード

ソース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環境変数は、VS 2015を使用すると、Webプロジェクトのプロパティで環境変数をカスタマイズできます.次のように
ASPNET_をENVはDevelopment以外の値を設定し、アプリケーションはUseDeveloperExceptionPageメソッドを呼び出すのではなく、500エラーを返します(UseExceptionHandler()が構成されていない限り、詳細はありません).以下ではerror pageが提供する特性を示します(ASPNET_ENVがDevelopmentに戻されることを確認します).

開発にerror pageを使用する


Web処理パイプで未処理の異常が発生した場合、デフォルトerror pageには有用な診断情報が表示されます.error pageには、リクエストに異常に関連する情報を表示するtabがいくつかあります.最初のtabはstack traceを表示します
第2 tabにはQuerystringに関する情報が表示されます.上記のように、リクエストで渡されたthrowパラメータの値が表示されます.今回のリクエストにはクッキーはありませんが、あれば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");

本明細書で上記のようにコンフィギュレーションメソッドを構成すると、要求に応答するには、次のようにします.
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情報を表示したり、歓迎ページに簡単に応答したりすることができます.