2010-02-04 240 views
2

我在我的解決方案中有2個項目。ASP.Net MVC:您如何從解決方案中的其他項目訪問會話?

  1. MVC Web應用程序
  2. 類庫

    • 的MVC Web應用程序引用類庫。
    • 類庫包含一個擴展默認ASP.Net控制器的類。

我把一個變量在會議應用程序的Global.asax。

protected void Session_Start(object sender, EventArgs args) 
{ 
    HttpContext.Current.Session["DomainName"] = Request.Url.Host; 
} 

類庫中,我試圖讓從HttpContext.Session價值,但HttpContext.Session不斷想出空。

public class MyController : System.Web.Mvc.Controller 
{ 
    public MyController() : base() 
    { 
     //HttpContext.Session is always null at this point 
     ViewData["DomainName"] = HttpContext.Session["DomainName"]; 
    } 
} 

HttpContext。 當前 .Session似乎不是控制器中的選項。有任何想法嗎?

回答

3

兩個問題 - 控制器類中的HttpContext屬性爲當前會話。不幸的是,它在控制器的構造函數中不可用。顯然,因爲它沒有在構造函數中傳遞,所以必須通過屬性設置。您可能會考慮添加一個屬性來保存域名並從中引用會話 - 這樣可以在需要時使用它。

protected string DomainName 
{ 
     get { return this.HttpContext.Session["DomainName"] as string; } 
} 

將它設置在您的動作或OnActionExecuting/OnActionExecuted中的ViewData中。

protected override void OnActionExecuted(ActionExecutedContext context) 
{ 
     ViewData["DomainName"] = this.HttpContext.Session["DomainName"]; 
     // or ViewData["DomainName"] = this.DomainName; // if you used the property 
} 
1

如果您只是試圖從會話中添加ViewData,請嘗試在OnActionExecuting方法中執行此操作。這是我通常爲每個View添加ViewData的地方。

0

你只是單獨使用Session(它是Controller的一個屬性),但它只映射到Controller.HttpContext.Session(換句話說,你已經在使用),所以它不能解決你的問題,它必須在別處。

雖然我不確定爲什麼要在會話中使用此功能,因爲您可以在操作期間直接閱讀Request.Url.Host

+0

感謝克雷格,是啊,我意識到我在這種情況下可以直接引用Session。在做WebForms時,我曾經在一個單獨的項目中首先引用上下文。 :) 是的,我知道我可以直接讀取Request.Url.Host,但它更像是如何做到這一點的主要問題。再次感謝您的反饋。 – 2010-02-04 16:09:15

0

當您創建的cookie,那麼你必須寫

Response.AppendCookie("Your cookie name"); 

如果你想要得到的是那麼像這樣

if (Request.Cookies["Your cookie name"] != null) 
    { 
     string value = Request.Cookies["Your cookie name"].Value; 
    } 

而且必須,如果有不同的解決方案 然後

machineK安永

需要是相同的這是下

的System.Web

在web.config中,然後寫

<httpCookies domain=".yourdomainname.com" /> 
相關問題