在应用程序的服务层中使用AspNetCore Http dll是否好?

时间:2018-11-19 05:31:09

标签: c# asp.net-core

为您提供一些背景信息:

我创建了一个多租户Web应用程序。

在这里,对于任何请求,请按照以下步骤进行操作

1. Fetch the user information such as ID from HttpContext object
2. Then getting the approprate db name from a common db.
3. Updating the dbContext with the db name
4. And all my repository classes are instantiated based on this updated dbContext 

在类库项目(服务层)中完成前2个步骤,在该项目中,为了获得用户ID,我必须访问被手动引用的HttpContext Object。 >(将dll并复制到文件夹中并添加到项目中)

正确的方法是什么?在类库项目中使用NetCore库是更好的主意吗?

1 个答案:

答案 0 :(得分:2)

尚不清楚您在这里做什么,但是对于HttpContext,有几点可以帮助您:

  1. 仅提供参考文献还不够。您必须手动删除DLL的事实只会增加这种方法无法正常工作的可能性。 HttpContext仅存在于请求管道的上下文中。不管您是否可以编译一些代码,如果代码不在该管道中运行,HttpContext将为空,对您毫无用处。

  2. 无论如何,库类通常都不应依赖于HttpContext之类的东西。如果在库类中需要类似用户ID的内容,则应将用户ID本身传递到构造函数或方法中(取决于哪一个最有意义)。如何从HttpContext获取用户ID的逻辑是您的类可能不应该拥有的领域知识。

  3. 如果要直接使用HttpContext,则应注入IHttpContextAccessor。这将要求您使用services.AddHttpContextAccessor()在ASP.NET Core应用程序中添加服务。完成此操作后,即可通过该访问器实例获取当前请求的HttpContext。但是,如果您不在请求管道中,它将仍然为null。