所以我有一个在第一次用户登录时设置的会话变量
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() })