如何保留可用于业务层的会话数据

时间:2013-03-12 16:28:56

标签: c# asp.net persistence

我正在构建一个ASP.Net MVC 4应用程序。用户必须登录并根据数据库检查帐户。在此数据库中,用户与一个或多个部门相关联。要求声明用户一次只能将应用程序用于一个部门。

这意味着在成功登录后,我会检查用户链接的部门数量。如果这只是一个,它将是活跃的部门。如果它不止一个,我会要求用户选择其中一个,这个选择将是活动部门。该值必须在整个会话期间保持不变。

应用程序中有许多用例只能访问属于活动部门的数据。这些限制应用于业务层,即不了解ASP.Net上下文的C#类库。

我怎样才能最好地保留用户对活动部门的选择?我不喜欢将它存储在de数据库中的想法,因为它不会在会话之外持久存在。另一方面,在我的业务层中,我找不到任何开箱即用的持久性配置。我的ASP.net应用程序提供了一个Session,但这些对于业务层是不可见的。

我是否应该将此值存储在会话中并使用AuthenticateRequest事件或类似内容将活动部门传递给业务层?

有更好的选择吗?

2 个答案:

答案 0 :(得分:3)

这些对于业务层是不可见的?你的意思是什么?

您实际上可以从类库中访问您的会话。你要做的是参考System.Web然后:

1)在代码中导入命名空间

2)var sessionValue = HttpContext.Current.Session["ActiveDepartment"];

或者,您可以在每次需要时将ActiveDepartment传递到您的业务层,而不是从会话中获取,因此您不依赖于Web应用程序

答案 1 :(得分:2)

存储活动部门可以在会话变量中完成:

Session["ActiveDepartment"] = 1

您的业务逻辑中不需要会话管理。在业务逻辑程序集周围编写一个包装器,需要为所有调用提供ActiveDepartmentID才能生效。包装器始终返回由ActiveDepartmentID筛选的数据。

由于这是一个MVC应用程序,您还可以在Controller级别通过在所有Controller操作中要求ActiveDepartmentID来强制执行此操作。