2010-02-04 229 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" /> 
相关问题