.netcore2.1 httpリクエスト時間の記録

4907 ワード

  • http要求を計算するためのミドルウェアクラスを定義する時間
  • .
    public class ResponseTimeMiddleware
    {
      // Name of the Response Header, Custom Headers starts with "X-" 
      private const string RESPONSE_HEADER_RESPONSE_TIME = "X-Response-Time-ms";
      // Handle to the next Middleware in the pipeline 
      private readonly RequestDelegate _next;
      public ResponseTimeMiddleware(RequestDelegate next)
      {
        _next = next;
      }
      public Task InvokeAsync(HttpContext context)
      {
        // Start the Timer using Stopwatch 
        var watch = new Stopwatch();
        watch.Start();
        context.Response.OnStarting(() => {
          // Stop the timer information and calculate the time  
          watch.Stop();
          var responseTimeForCompleteRequest = watch.ElapsedMilliseconds;
          // Add the Response time information in the Response headers.  
          context.Response.Headers[RESPONSE_HEADER_RESPONSE_TIME] = responseTimeForCompleteRequest.ToString();
          return Task.CompletedTask;
        });
        // Call the next delegate/middleware in the pipeline  
        return this._next(context);
      }
    }
  • ミドルウェア拡張クラスの定義MyMiddlewareExtensions
  • using Microsoft.AspNetCore.Builder;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace MyApi.Middleware
    {
        public static class MyMiddlewareExtensions
        {
            public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder builder)
            {
                return builder.UseMiddleware();
            }
        }
    }
  • StartupでのConfigureメソッドでは、ミドルウェア
  • を登録する.
         public void Configure(IApplicationBuilder app, IHostingEnvironment env,
                Microsoft.AspNetCore.Hosting.IApplicationLifetime lifetime)
            {
            
                //    
                app.UseCors(builder => builder
                    .AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials());
                app.UseHttpsRedirection();
    
                app.UseMyMiddleware();//     
    
                app.UseMvc();
    
           
    
            }