我正在努力将ASP.NET 4.6框架代码迁移到.NET Core。我现在只处于学习阶段。我是MVC的新手,因为我总是使用WebForms,但我想离开WebForms。我也是ASP.NET Core的新手。
基本上,我有一个类库,可以完成我的大部分工作 - 使我免于在多个页面甚至网站上重复代码(数据库,会话,自定义身份管理)。我将DLL添加到项目中,它已准备就绪。
我发现ASPNET Core并不能完全允许这一点。也许我不理解它,或者也许现在开始移植它还为时过早。
我需要能够访问我的类库中的HttpContext来操作会话,cookie等等。最简单的方法是什么?我想一旦我能做到这一点,我就可以开始取得更好的进展。
或者,我是否需要重新考虑编写类库?根据我的理解,我需要编写中间件来实现这一目标。但我能找到的每一个例子都不完整或已经过时了。
欢迎任何建议。
答案 0 :(得分:10)
将HttpContext
用于全方位逻辑并不是一个好主意,但如果您真的打算这样做,只需坚持一个SOLID原则,即。 依赖性倒置原则。
ASP.NET MVC及其后继者,ASP.NET Core在这个原则上奠定了基础。
在需要它的类库的任何类的构造函数中注入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>();
}
}
答案 1 :(得分:1)
在 asp.netcore mvc 中,HttpContext
在控制器范围之外无法访问。因此,您无法直接访问类库中的HttpContext
。你必须以其他方式访问它。
您可以将HttpContext
发送到类库,从Controller的构造函数发送到类库类的构造函数,或发送到需要操作方法中当前HttpContext
的特定库方法控制器。
答案 2 :(得分:0)
步骤 1:在启动类 -> 在 ConfigureServices 添加以下行
services.AddHttpContextAccessor();
步骤 2:在您的类库中。例如。
public class Dog
{
public HttpContext _httpContext => new HttpContextAccessor().HttpContext;
public void Speak()
{
_httpContext.Response.WriteAsync("Dog says: Bow-Wow...\n");
}
}
答案 3 :(得分:-1)
在 ASP.net核心中,某些功能已从 HttpContex 中删除,并且访问方法已更改
您可以在ASP.net核心
中使用此方法How to use sessions in a .net core 2.0 class library project