我正在使用 MVC3 用 C# 创建一个网站。该网站是使用网络服务的客户端。 Web 服务为每个用户使用唯一的会话 ID,该 ID 作为每个服务调用中的最后一个参数给出。登录时您会获得会话 ID。
我能够获取会话 ID 并将其保存在我的用户控制器的属性中:
private string Sid
{
get
{
var sid = Session["Sid"];
return sid == null ? "" : sid.ToString();
}
set
{
Session["Sid"] = value;
}
}
在我的其他控制器中,我能够使用类似的属性获取会话 ID(只是没有设置器),但是当它要求用户控制器执行某些操作(访问其自己的属性以获取 id)时,会话为空。
会话似乎没有在控制器之间传输,但我不知道该怎么做。我想从一个中心位置访问会话,而不是在每个控制器中都有属性,但我不知道如何做到这一点。
经过三天的谷歌搜索也没有给我答案。你有什么想法?
为什么不创建一个基本控制器来创建会话变量OnActionExecuting
方法,然后让所有其他控制器继承自该基本控制器,如下所示:
public class BaseController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
Session["Sid"] = Session.SessionID;
base.OnActionExecuting(filterContext);
}
}
public class HomeController : BaseController
{
public ActionResult Index()
{
ViewBag.Name = Session["Sid"];
return View();
}
}
public class TestController : BaseController
{
public ActionResult Index()
{
ViewBag.Name = Session["Sid"];
return View();
}
}
希望这可以帮助!
Edit
根据您下面的评论,我相信您正在寻找(?):
public class BaseController : Controller
{
public string Sid
{
get
{
var sid = Session["Sid"];
return sid == null ? "" : sid.ToString();
}
set
{
Session["Sid"] = value;
}
}
}
public class HomeController : BaseController
{
public ActionResult Index()
{
Sid = "2343432233aaaa";
ViewBag.Name = Session["Sid"];
return View();
}
}
public class TestController : BaseController
{
public ActionResult Index()
{
ViewBag.Name = Session["Sid"];
return View();
}
}
你可以替换我设置的地方Sid
使用从您的服务生成的 SessionId
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)