C# 访问AspNetRequest
我有一个全局筛选器,它将令牌添加到请求中。项集合,后续筛选器也可以访问该集合 我遇到的问题是,当我在注入类中时,试图获取request.Items 尝试使用访问此注入类的Items数组时C# 访问AspNetRequest,c#,asp.net,
servicestack,C#,Asp.net,
servicestack,我有一个全局筛选器,它将令牌添加到请求中。项集合,后续筛选器也可以访问该集合 我遇到的问题是,当我在注入类中时,试图获取request.Items 尝试使用访问此注入类的Items数组时 var req=HostContext.TryGetCurrentRequest()我的项目不再可用。我发现这是因为在过滤器中,提供的IRequest.Items数组是HttpContext.Current.Items在AspNetRequest对象中的克隆副本,因此我添加的任何内容都不会放入HttpConte
var req=HostContext.TryGetCurrentRequest()代码>我的项目不再可用。我发现这是因为在过滤器中,提供的IRequest.Items
数组是HttpContext.Current.Items
在AspNetRequest
对象中的克隆副本,因此我添加的任何内容都不会放入HttpContext.Current.Items
因此,我的问题是,在这种情况下,如何访问或注入当前的AspNetRequest.Items
数组,还是直接将项目添加到HttpContext.current.Items
请参阅以获取克隆。您可以通过以下方式从IRequest获取基本的ASP.NET请求:
var aspReq = (HttpRequestPase)req.OriginalRequest;
var item = aspReq.Items["item"];
否则,您也可以使用HttpContext.Current.Items
singleton.谢谢,这涵盖了我从筛选器中设置项目的内容,但是我无法从其他地方访问该AspNetRequest吗?不确定您的意思,IRequest在整个ServiceStack中随处可用,所以当我在筛选器中检索IRequest时,它是AspNetRequest
的一个实例。这很好,后续过滤器也会看到相同的实例。但是,当我在一个注入的类中检索它时,它似乎是AspNetRequest
的一个新实例,它丢失了我通过IRequest.AddItem扩展添加的项,因为它们将该项添加到AspNetRequest
的上一个实例中。当我调用AddItem时,数据丢失了,并且没有传递到底层HttpContext,这让人觉得有点笨拙。@dnolan它只是ASP.NET HttpRequestBase的一个新实例。如果它是另一个请求,ServiceStack不会创建ASP.NET底层HttpContext的实例。如果您通过singleton检索它,那么它将返回一个新的IRequest包装实例,因为它必须这样做,它无法维护对同一IRequest的singleton引用,因为它不是线程安全的,但是如果它是同一个请求,它将包装相同的基础ASP.NET HttpRequestBase。如果您想要相同的IRequest实例,请不要从HttpContext单例获取它,而是从服务的base.Request传递它。