src/NetCoreApp/Middlewares/ExecuteTimeMiddleware.cs
(完整代码) 1KBusing Microsoft.AspNetCore.Http;
using System.Diagnostics;
using System.IO;
using System.Threading.Tasks;
namespace YL.NetCore.Middlewares
{
public class ExecuteTimeMiddleware
{
private const string RESPONSE_HEADER_RESPONSE_TIME = "X-Response-Time-ms";
private readonly RequestDelegate _next;
public ExecuteTimeMiddleware(RequestDelegate next)
{
_next = next;
}
public Task InvokeAsync(HttpContext context)
{
var watch = new Stopwatch();
watch.Start();
context.Response.OnStarting(() =>
{
watch.Stop();
var responseTimeForCompleteRequest = watch.ElapsedMilliseconds;
context.Response.Headers[RESPONSE_HEADER_RESPONSE_TIME] = responseTimeForCompleteRequest.ToString();
return Task.CompletedTask;
});
return _next(context);
}
private async Task<string> FormatRequest(HttpRequest request)
{
request.EnableBuffering();
request.Body.Seek(0, SeekOrigin.Begin);
var text = await new StreamReader(request.Body).ReadToEndAsync();
request.Body.Seek(0, SeekOrigin.Begin);
return text?.Trim().Replace("\r", "").Replace("\n", "");
}
private async Task<string> FormatResponse(HttpResponse response)
{
if (response.HasStarted)
{
return string.Empty;
}
response.Body.Seek(0, SeekOrigin.Begin);
var text = await new StreamReader(response.Body).ReadToEndAsync();
response.Body.Seek(0, SeekOrigin.Begin);
return text?.Trim().Replace("\r", "").Replace("\n", "");
}
}
}
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。