Asp.net core 在ASP.NET core 2.1中获取请求时间

Asp.net core 在ASP.NET core 2.1中获取请求时间,asp.net-core,Asp.net Core,我需要获取请求的时间,以对一些数据库记录和将在整个请求过程中创建的其他记录进行版本设置 我现在不能使用DateTime,因为我希望在整个请求过程中都可以访问相同的时间 我似乎在HTTPContext类中找不到任何帮助。使用HTTPContext.Features和HTTP请求管道中间件 公共界面IHttpRequestTimeFeature { DateTime请求时间{get;} } 公共类HttpRequestTimeFeature:ihttpprequesttimefeature { 公共

我需要获取请求的时间,以对一些数据库记录和将在整个请求过程中创建的其他记录进行版本设置

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

我似乎在HTTPContext类中找不到任何帮助。

使用HTTPContext.Features和HTTP请求管道中间件
公共界面IHttpRequestTimeFeature
{
DateTime请求时间{get;}
}
公共类HttpRequestTimeFeature:ihttpprequesttimefeature
{
公共日期时间请求时间{get;}
公共HttpRequestTimeFeature()
{
RequestTime=DateTime.Now;
}
}
//你不需要一个单独的类
公共类请求时间中间件
{
private readonly RequestDelegate\u next;
公共RequestTimeMiddleware(RequestDelegate下一步)
{
_下一个=下一个;
}
公共任务InvokeAsync(HttpContext上下文)
{
var httpRequestTimeFeature=新的httpRequestTimeFeature();
context.Features.Set(httpRequestTimeFeature);
//调用管道中的下一个委托/中间件
返回此。\u下一步(上下文);
}
}
您必须在
启动中添加此中间件。配置

app.UseMiddleware()

您可以通过以下方式访问请求时间:

var-httpRequestTimeFeature=HttpContext.Features.Get();
if(httpRequestTimeFeature!=null)
{
var requestTime=httpRequestTimeFeature.requestTime;
}
使用HttpContext.Items
HttpContext.Items[“RequestTime”]=DateTime.Now

如果我没有错,您还可以将其存储在作用域服务(
services.addScope()
)中,这将在整个请求中都有效

但我不知道ASP.NET内核中是否内置了请求时间


您也可以在MVC过滤器中设置,但我认为这在较低级别(HTTP请求管道)中更有效。

为什么不能使用datetime变量,比如requestTime=datetime.Now()在创建请求和使用requestTime之前,请在编辑记录时考虑请求?您可以使用
DateTime。现在
将其添加到中间件或其他地方的
HttpContext.Items
。如果我没有错,您也可以使用
HttpContext.Features
。谢谢回答。这看起来很合理,我将尝试实施它。我很惊讶没有内置时间戳。@Christopher Redwards你应该在官方回购协议上询问,你可能会从从事HTTP工作的人那里得到更好的回复stuff@ChristopherEdwards有些东西看起来像是一个时间,但是base32编码,时间被封装在
私有静态long\u requestId
中。这将为您提供唯一的请求id。@ChristopherRedwards它在asp.net MVC中可用,但未移植到core。