在 MVC3 中引用会话/全局用户变量的正确方法



所以我有一个在第一次用户登录时设置的会话变量

Session["ClientID"]

基本上,这是用于主题(因此ClientID将主题/品牌设置为出现在网站上)。查看应用的代码

(Guid)Session["ClientID"] 

处都是看起来很脏而且容易出错,这是使用什么最好的设计模式来获得全局认可的变量。所以我可以做

this.CurrentClientID

或所有 MVC 页面上的类似内容。理论上,我可以使用提供此 ID 的自定义类重载 Controller 类,但我不确定如何将其公开给视图。

任何指向最佳解决方案的指示将不胜感激!

不知道全局是什么意思,但是ControllerBase类的扩展方法将使它在所有控制器中都可以访问:

public static class ControllerExtensions
{
    public static Guid GetCurrentClientID(this ControllerBase controller)
    {
        return (Guid)controller.ControllerContext.HttpContext.Session["ClientID"];
    }
}

现在在每个控制器中,您可以访问它:

public ActionResult Foo()
{
    Guid id = this.GetCurrentClientID();
    ...
}

如果您希望它更加全局可用,请使其成为 HttpContextBase 类的扩展方法:

public static class ControllerExtensions
{
    public static Guid GetCurrentClientID(this HttpContextBase context)
    {
        return (Guid)context.Session["ClientID"];
    }
}

现在,只要您可以访问 HttpContext(在 ASP.NET 应用程序中几乎无处不在),您只需使用扩展方法即可。例如,在视图中:

@Html.ActionLink("foo link", "foo", new { clientid = Context.GetCurrentClientID() })

最新更新