首页 > 编程 > .NET > 正文

ASP.NET Core中间件计算Http请求时间示例详解

2020-01-17 22:03:43
字体:
来源:转载
供稿:网友

ASP.NET Core通过RequestDelegate这个委托类型来定义中间件

public delegate Task RequestDelegate(HttpContext context);

可将一个单独的请求委托并行指定为匿名方法(称为并行中间件),或在类中对其进行定义。可通过Use,或在Middleware类中配置要传递给委托执行的方法(参数类型HttpContext,返回值类型Task)。

public static IApplicationBuilder Use(this IApplicationBuilder app, Func<HttpContext, Func<Task>, Task> middleware);public static IApplicationBuilder UseMiddleware<TMiddleware>(this IApplicationBuilder app, params object[] args);

通过定义一个中间件类 来计算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);  }}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对武林网的支持。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表