Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问AspNetRequest_C#_Asp.net_<img Src="//i.stack.imgur.com/WM7S8.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">servicestack - Fatal编程技术网 servicestack,C#,Asp.net,servicestack" /> servicestack,C#,Asp.net,servicestack" />

C# 访问AspNetRequest

C# 访问AspNetRequest,c#,asp.net,servicestack,C#,Asp.net,servicestack,我有一个全局筛选器,它将令牌添加到请求中。项集合,后续筛选器也可以访问该集合 我遇到的问题是,当我在注入类中时,试图获取request.Items 尝试使用访问此注入类的Items数组时 var req=HostContext.TryGetCurrentRequest()我的项目不再可用。我发现这是因为在过滤器中,提供的IRequest.Items数组是HttpContext.Current.Items在AspNetRequest对象中的克隆副本,因此我添加的任何内容都不会放入HttpConte

我有一个全局筛选器,它将令牌添加到请求中。项集合,后续筛选器也可以访问该集合

我遇到的问题是,当我在注入类中时,试图获取request.Items

尝试使用访问此注入类的Items数组时
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传递它。