DD.WellWorkover.Cloud/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs

56 lines
2.0 KiB
C#

using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;
using Org.BouncyCastle.Asn1.Ocsp;
using System.Threading.Tasks;
namespace AsbCloudWebApi.Middlewares
{
public class RequerstTrackerMiddleware
{
private readonly RequestDelegate next;
public RequerstTrackerMiddleware(RequestDelegate next)
{
this.next = next;
}
public async Task InvokeAsync(HttpContext context)
{
var service = context.RequestServices.GetRequiredService<AsbCloudApp.Services.IRequerstTrackerService>();
var requestLog = new AsbCloudApp.Data.RequestLogDto
{
UserLogin = context.User.Identity?.Name ?? string.Empty,
UserIp = context.Connection?.RemoteIpAddress?.ToString(),
RequestMethod = context.Request.Method,
RequestPath = context.Request.Path.Value,
RequestContentLength = context.Request.ContentLength,
Referer = context.Request.Headers["Referer"].ToString(),
};
{
var userIdString = context.User?.FindFirst("id")?.Value;
if (!string.IsNullOrEmpty(userIdString) && int.TryParse(userIdString, out int userId))
requestLog.UserId = userId;
}
var sw = System.Diagnostics.Stopwatch.StartNew();
try
{
await next.Invoke(context);
sw.Stop();
requestLog.ElapsedMilliseconds = sw.ElapsedMilliseconds;
requestLog.Status = context.Response.StatusCode;
service.RegisterRequest(requestLog);
}
catch (System.Exception ex)
{
sw.Stop();
requestLog.ElapsedMilliseconds = sw.ElapsedMilliseconds;
requestLog.Status = context.Response.StatusCode;
service.RegisterRequestError(requestLog, ex);
throw;
}
}
}
}