Получить время запроса в ASP.NET core 2.1 - PullRequest
0 голосов
/ 29 мая 2018

Мне нужно получить время запроса для версии некоторых записей базы данных и других записей, которые будут созданы в течение запроса.

Я не могу использовать DateTime сейчас, потому что я хочу, чтобы это же время было доступнона протяжении всего запроса.

Кажется, я не могу найти что-либо в классе HTTPContext, чтобы помочь мне.

1 Ответ

0 голосов
/ 29 мая 2018

Использование 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-запроса).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...