我正在努力将我的 ASP.NET 4.6 框架代码迁移到 .NET Core。我现在只处于学习阶段。我是 MVC 的新手,因为我一直使用 WebForms,但我想远离 WebForms。我也是 ASP.NET Core 的新手。
基本上,我有一个类库来完成我的大部分工作 - 使我免于跨多个页面甚至网站重复代码(数据库、 session 、自定义身份管理)。我将 DLL 添加到项目中,它已准备就绪。
我发现 ASPNET Core 不太允许这样做。也许我不理解它,或者现在开始移植到它还为时过早。
我需要能够访问我的类库中的 HttpContext 以操作诸如 session 、cookie 等内容。最简单的方法是什么?我认为一旦我能做到这一点,我就能开始取得更好的进步。
或者,我是否需要重新考虑编写一个类库?据我了解,我需要编写中间件来完成此操作。但我能找到的每个示例要么不完整,要么已经过时。
欢迎提出任何建议。
最佳答案
将 HttpContext
用于全方位逻辑并不是一个好主意,但如果您真的打算这样做,只需坚持 SOLID 原则之一,即。 依赖倒置原则。
ASP.NET MVC 及其后继者 ASP.NET Core 的基础正是基于这一原则。
在类库中需要它的任何类的构造函数中注入(inject) IHttpContextAccessor
。
示例:
public class ContextHelper
{
private IHttpContextAccessor _httpContextAccessor;
public ContextHelper(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public void DoStuff()
{
DoOtherStuffWith(_httpContextAccessor.HttpContext);
}
}
记得像这样在默认的 IoC 容器中的 Startup
中注册它:
public class Startup
{
// Rest of the class here...
public void ConfigureServices(IServiceCollection services)
{
// Other registrations here...
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
}
关于c# - 使用 ASP.NET Core 1.1 (MVC) 访问类库中的 httpcontext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43528215/