You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
1.4 KiB
C#
39 lines
1.4 KiB
C#
using Microsoft.AspNetCore.Http;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Myshipping.Core
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
}
|