2013-02-25 12 views
23

Bazı kullanıcı verilerini eylem filtresine alıyorum ve bu verilerin bir kısmını bir denetleyicinin eyleminde kullanabilirim, ancak bir filtreden bir denetleyiciye veri iletmeyi tam olarak bilmiyorum. MVC'de büyük olasılıkla oturum veya HttpContext.Items kullanıyorum, ancak web API'sinde mevcut değil. Başka bir seçenek ThreadStatic kullanmaktır, ama daha iyi bir çözüm olmalı diye düşünüyorum?WebApi: durumu filtreden denetleyiciye nasıl geçirebilirim?

cevap

46

Bunu yapmak için Request.Properties sözlüğünü kullanabilirsiniz. filtresinde

:

MyType myObject = //initialize from somwhere 
actionContext.Request.Properties.Add("mykey", myObject); 

Ve sonra kontrolöre geri alabilirsiniz:

object myObject; 
Request.Properties.TryGetValue("mykey", out myObject); 
//cast to MyType 

Bu yaklaşımın avantajı mevcut istek örneği Web API her yerde kullanılabilir olmasıdır boru hattı, böylece bu nesneye erişebilirsiniz, örneğin Formatter veya MessageHandler'da.

+0

İsteğim nesnesinde Özellikler yok, yalnızca Params. Bir fark var mı? Ve doğrudan filterContext içinde değil, filterContext.HttpContext içinde yok. –

+0

daha sonra MVC filtresiyle ilgilenmiyorsunuz Web API filtresi - ilk önce ASP.NET MVC boruhattı ile kullanılır ve system.web.mvc üyeleridir, ikincisi ise ASP.NET Web API boru hattı ile birlikte kullanılır ve sisteme üyedir .web.http. Onları karıştırmayın, onlar farklı bileşenler –

+0

Ah, benim hatam. –

İlgili konular