gpt4 book ai didi

asp.net-core - 在 ASP.NET core 2.1 中获取请求的时间

转载 作者:行者123 更新时间:2023-12-03 19:47:46 24 4
gpt4 key购买 nike

我需要获取请求的时间来版本一些数据库记录和将在整个请求中创建的其他记录。

我现在不能使用 DateTime,因为我希望在整个请求过程中都可以访问相同的时间。

我似乎无法在 HTTPContext 类中找到任何帮助我的东西。

最佳答案

使用 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>();
您可以访问请求时间,如:

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 请求管道)中更有效。

关于asp.net-core - 在 ASP.NET core 2.1 中获取请求的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50589179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com