2016-08-12 8 views
1

私は、後続のフィルタもアクセスできるrequest.Itemsコレクションにトークンを追加するグローバルフィルタを持っています。AspNetRequestへのアクセス

私が抱えている問題は、要求を保留しようとしているときです。注射されたクラス内にいるときのアイテムです。

この注入されたクラスをアイテム配列にアクセスしようとすると、 var req = HostContext.TryGetCurrentRequest();アイテムは利用できなくなりました。私はこれがフィルタで提供されたIRequest.Items配列がAspNetRequestオブジェクト内のHttpContext.Current.Itemsのクローンコピーであるため、私が追加するものはHttpContext.Current.Itemsに配置されていないためです。

このような状況で現在のAspNetRequest.Items配列にアクセスまたは注入するにはどうすればよいですか、またはHttpContext.Current.Itemsに直接項目を追加するだけですか?

クローンについてはhttps://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/Host/AspNet/AspNetRequest.cs#L53を参照してください。

答えて

2

あなたがしてIRequestから基本となるASP.NETの要求を取得することができます。そうしないとあなたもHttpContext.Current.Itemsシングルトンを使用することができ

var aspReq = (HttpRequestPase)req.OriginalRequest; 
var item = aspReq.Items["item"]; 

+0

ありがとうございます、それは私がフィルタから項目を設定することをカバーしていますが、他の場所からそのAspNetRequestにアクセスする私の方法はありませんか? – dnolan

+0

あなたが何を意味するかわからない、IRequestはServiceStackのどこでも利用できます – mythz

+0

したがって、フィルタでIRequestを取得すると、そのインスタンスは 'AspNetRequest'になります。これは素晴らしいことであり、その後のフィルタでもこの同じインスタンスが表示されます。しかし、私が注入したクラスの中でそれを取り出すと、 'AspNetRequest'の新しいインスタンスのように見えます。これは、' AspNetRequest'の前のインスタンスにアイテムを追加したため、IRequest.AddItem拡張を介して追加したアイテムを失いました'。 AddItemを呼び出すと、そのデータが失われ、基になるHttpContextに渡されないということはちょっと気になります。 – dnolan

関連する問題