Использование HttpContext.Features и промежуточного программного обеспечения конвейера HTTP-запросов
public interface IHttpRequestTimeFeature
{
DateTime RequestTime { get; }
}
public class HttpRequestTimeFeature : IHttpRequestTimeFeature
{
public DateTime RequestTime { get; }
public HttpRequestTimeFeature()
{
RequestTime = DateTime.Now;
}
}
// You don't need a separate class for this
public class RequestTimeMiddleware
{
private readonly RequestDelegate _next;
public RequestTimeMiddleware(RequestDelegate next)
{
_next = next;
}
public Task InvokeAsync(HttpContext context)
{
var httpRequestTimeFeature = new HttpRequestTimeFeature();
context.Features.Set<IHttpRequestTimeFeature>(httpRequestTimeFeature);
// Call the next delegate/middleware in the pipeline
return this._next(context);
}
}
Вы должны добавить это промежуточное программное обеспечение в Startup.Configure
:
app.UseMiddleware<RequestTimeMiddleware>();
Youможно получить доступ к времени запроса, например:
var httpRequestTimeFeature = HttpContext.Features.Get<IHttpRequestTimeFeature>();
if (httpRequestTimeFeature != null)
{
var requestTime = httpRequestTimeFeature.RequestTime;
}
Использование HttpContext.Items
HttpContext.Items["RequestTime"] = DateTime.Now;
Вы также можете сохранить его в своем сервисе с ограничениями (services.AddScoped<YourService>()
), если яя не ошибаюсь, это будет действовать в течение всего запроса.
Я не знаю, есть ли такая вещь, как время запроса, встроенное в ASP.NET Core, хотя.
Вы можететакже установите это в фильтрах MVC, но я думаю, что это более верно на более низком уровне (конвейер HTTP-запроса).