我的解决方案中有2个项目。
类库
我在应用程序的Global.asax中将变量放入会话中。
protected void Session_Start(object sender, EventArgs args)
{
HttpContext.Current.Session["DomainName"] = Request.Url.Host;
}
在类库中我试图从HttpContext.Session中获取值,但是HttpContext.Session一直保持为null。
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似乎不是控制器中的一个选项。有什么想法吗?
答案 0 :(得分:3)
两个问题 - Controller类中的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 :(得分:1)
如果您只是尝试从会话中添加ViewData,请尝试在OnActionExecuting方法中执行此操作。这是我通常为每个View添加我想要的ViewData。
答案 2 :(得分:0)
你只需使用Session
(它是Controller的一个属性),但这只是映射到Controller.HttpContext.Session
(换句话说,你已经使用的是),所以它不会解决你的问题,必须在其他地方。
我不确定你为什么把它放在会话中,因为你可以在行动中直接阅读Request.Url.Host
。
答案 3 :(得分:0)
当您创建cookie时,您必须编写
Response.AppendCookie("Your cookie name");
如果你想得到那么类似的东西
if (Request.Cookies["Your cookie name"] != null)
{
string value = Request.Cookies["Your cookie name"].Value;
}
并且必须有不同的解决方案 那么
的machineKey
需要与
下相同在web.config中的System.Web
然后编写
<httpCookies domain=".yourdomainname.com" />