如何以及在何处声明可在整个MVC /单页面应用程序中访问的全局变量

时间:2016-04-13 10:06:31

标签: c# asp.net-mvc entity-framework authentication

我正在使用带有EF的asp.net mvc。对于控制器中我的应用程序中的每个登录会话,我可以获取使用var userID = int.Parse(User.Identity.Name);登录的用户的用户ID但是我也想在其他存储库和服务类中使用它是最初获取此值的方法每个会话并将其值存储在一个全局变量中,该变量可由解决方案中的每个类访问

2 个答案:

答案 0 :(得分:0)

由于您需要存储的数据是会话级别,因此请将数据存储在Session变量中。例如。会话[" UserId"] = userId。您可以从该会话的应用程序的任何位置访问用户ID。 var userId =(int)Session [" UserId"]

答案 1 :(得分:0)

在MVC中,用户在Page请求的上下文中是已知的,但在其他(存储库/服务/ BL / DAL)类中则不是这种情况。他们不 - 而且不应该! - 对MVC有任何了解。

您可以通过为所有控制器创建基类来实现更轻松的生活,实现一些方法&那里的属性,让实际的控制器继承它。像这样:

<强> MyBaseController.cs

public abstract class MyBaseController : Controller
{
    public int UserID
    {
        get { return int.Parse(User.Identity.Name); }
    }

    // other useful methods & properties...
}

<强> MyController.cs

public class MyController : MyBaseController
{
    public ActionResult Index()
    {
        var data = MyService.GetData(UserID);
        return View(data);
    }
}