.netcore2.1 记录http请求时间

  • 定义一个中间件类 来计算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<ResponseTimeMiddleware>(); } }}
  •  在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(); }

 

相关文章