我有一个 MVC 4 应用程序,它使用不同类库中的服务层。
对该服务层的一些调用需要知道哪些用途正在请求数据。
数据记录因用户角色而异。
对于防止耦合问题,我应该在请求中传递用户名 (HttpContext.User.Identity.Name) 还是应该使用相同的 HttpContext.User.Identity.Name 在服务层直接访问它。
我不确定是否应该从服务层隐藏 HttpContext。
我有一个 MVC 4 应用程序,它使用不同类库中的服务层。
对该服务层的一些调用需要知道哪些用途正在请求数据。
数据记录因用户角色而异。
对于防止耦合问题,我应该在请求中传递用户名 (HttpContext.User.Identity.Name) 还是应该使用相同的 HttpContext.User.Identity.Name 在服务层直接访问它。
我不确定是否应该从服务层隐藏 HttpContext。
只需将当前经过身份验证的用户作为参数传递给您的服务层。永远不要HttpContext.User.Identity.Name
在你的服务层中使用。
例如:
[Authorize]
public ActionResult SomeAction()
{
string user = User.Identity.Name;
this.someService.SomeOperation(user);
...
}
您的服务层永远不应绑定到HttpContext
.
将 HttpContext 传递给服务层可能看起来很诱人,但这是一个糟糕的选择。它会在 ASP.net 运行时服务和业务逻辑之间建立一个硬链接(这正是您要避免的,我假设)。最好的办法是创建类来表示登录用户,您可以将其填充到基本控制器中并将其传递给服务层。
这样,您可以两全其美