![](/img/trans.png)
[英]How to use authentication cookie from WCF Authentication Service in an ASP.Net MVC application
[英]How to use the asp.net mvc session in service stack without authentication mechanism
我正在研究Asp.Net MVC和服務堆棧。 我正在嘗試實現這一點,請在服務堆棧服務類中使用asp.net mvc會話。 就是說
Public ActionResult Index()
{
Session["username"]="xxx";
return View();
}
從現在開始,我需要能夠在服務堆棧服務類中使用Session["username"]
,但是我無法在服務堆棧服務類中使用Session。 HttpContext.Current.Session
引發null異常。 我提到了Social Bootstrap Api服務堆棧示例項目,因為它們使用CustomUserSession
類,這意味着在身份驗證之后,他們會將數據存儲到會話中,例如,
Plugins.Add(new AuthFeature(
() => new CustomUserSession(), //Use your own typed Custom UserSession type
new IAuthProvider[] {
new CredentialsAuthProvider()
}));
但是在我的應用程序中沒有身份驗證機制,但是我需要將一些信息存儲到會話中,並在服務堆棧服務類中使用該會話。
要在服務堆棧中啟用會話而無需身份驗證,我們使用
Plugins.Add(new SessionFeature());
因此,如何在未經身份驗證的情況下在服務堆棧中使用asp.net mvc會話。 請指導我。
要知道的一個重要區別是ServiceStack會話是完全獨立的,並且與ASP.NET會話沒有任何關系(名稱除外)。 在大多數情況下,ServiceStack中的會話只是存儲在已注冊的緩存提供程序中的blob ,並由隨每個HTTP請求發送的SessionId Cookies引用。
在ASP.NET MVC中訪問ServiceStack會話的最簡單方法是擴展ServiceStackController並使用SessionAs<T>()
方法訪問鍵入的會話,例如:
public class MyMvcController : ServiceStackController
{
public ActionResult Index()
{
MyUserSession myServiceStackSession = base.SessionAs<MyUserSession>();
return View();
}
}
這利用了注入到base.Cache
屬性中的已注冊ICacheClient
提供程序。 您可以通過設置MVC的SetControllerFactory()
來使用ServiceStack的IOC自動連接具有在ServiceStack的IOC中注冊的依賴項的ASP.NET MVC控制器,例如:
public override void Configure(Funq.Container container)
{
//Set MVC to use the same Funq IOC as ServiceStack
ControllerBuilder.Current.SetControllerFactory(
new FunqControllerFactory(container));
}
否則,如果要為ASP.NET MVC控制器和ServiceStack使用不同的IOC,則需要在MVC IOC中注冊與ServiceStack的IOC中注冊的相同的ICacheClient Provider 。 如果未注冊CacheClient,則ServiceStack默認使用MemoryCacheClient
。
有關將ServiceStack與ASP.NET MVC集成的更多信息,請參見Wiki。
當托管在ASP.NET上時,您可以使用以下命令訪問基礎的ASP.NET請求:
public class MyServices : Service
{
public object Any(MyRequest request)
{
var aspReq = base.Request.OriginalRequest as HttpRequestBase;
if (aspReq != null)
{
var value = aspReq.RequestContext.HttpContext.Session["key"];
}
//or if you prefer via the ASP.NET Singleton:
var value = HttpContext.Current.Session["key"];
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.