0

所以我有一个在第一次用户登录期间设置的 Session 变量

Session["ClientID"]

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

(Guid)Session["ClientID"] 

到处都是看起来很脏而且容易出错,这是让变量全局识别的最佳设计模式。所以我可以

this.CurrentClientID

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

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

4

1 回答 1

2

不知道您的全局意思是什么,但是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() })
于 2012-07-02T16:04:37.063 回答