Session ASP.NET5/MVC6,如何在类库中使用会话?

Session ASP.NET5/MVC6,如何在类库中使用会话?,session,asp.net-core,asp.net-core-mvc,asp.net-core-1.0,class-library,Session,Asp.net Core,Asp.net Core Mvc,Asp.net Core 1.0,Class Library,对于.NET 4.6.1,我想在类库中使用Sessionstate,类似于: public static void SetUserId() { HttpContext.Current.Session["userId"] = 1; } 但当我调用此方法时,它会抛出一个异常“处理请求时发生未处理的异常。”>“NullReferenceException:对象引用未设置为对象的实例。” 我的类库中有一个对system.Web的引用。在.NET4中,我可以安全地

对于.NET 4.6.1,我想在类库中使用Sessionstate,类似于:

    public static void SetUserId()
    {
        HttpContext.Current.Session["userId"] = 1;
    }
但当我调用此方法时,它会抛出一个异常“处理请求时发生未处理的异常。”>“NullReferenceException:对象引用未设置为对象的实例。” 我的类库中有一个对system.Web的引用。在.NET4中,我可以安全地执行此操作。但这是.NET4.6.1中的一个问题。 我怎样才能解决这个问题?
感谢这是
null
默认情况下,驱动ASP.NET Core 1.0的概念是可插入中间件。您需要明确选择加入会话

您需要确保
project.json
中同时存在
Microsoft.Extensions.Caching.Memory
Microsoft.AspNet.Session
依赖项。然后在你的
Startup.cs
添加以下内容:

public void ConfigureServices(IServiceCollection services)
{
    // Add framework services.
    services.AddMvc();
    services.AddCaching();
    services.AddSession(options => { 
            options.IdleTimeout = TimeSpan.FromMinutes(30); 
            options.CookieName = ".MyApplication";
        });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    app.UseSession();

    // Removed for brevity...
}
详细文章。这应该是你需要做的全部

更新

避免尝试在web应用程序之外使用
HttpContext.Current
。这仅适用于HTTP请求/响应管道的上下文。最好利用抽象来实现所需的交互


为了提供一个明确的示例,我需要您共享更多的源代码。

如果您需要在类库中以这种方式访问会话ID,那么这应该是一个很好的迹象,表明您做错了什么?我有一个来自.NET4.0的项目,它运行良好。当我迁移到.NET 4.6.1时,问题就出现了。也许可以检查实际的异常?它是一个NullReferenceException异常。HttpContext为空,但为什么?@AliBorjian:不要从类库调用基础结构,使用抽象。直接访问HttpContext的想法(在控制器之外不再像现在这样可用,只需注入IHttpContextAccessor)应该告诉您,您使用了完全错误的方法会话Stae在我的ASP.NET应用程序中可用,我的问题在类库中。我访问ASP.NET应用程序中的会话,但不访问类库中的会话。在.NET4.0中,我没有这样的问题。当我迁移到.NET4.6.1时会出现异常。顺便说一下,类库中没有任何startup.cs。更新:如何访问类库中的应用程序状态?我们可以使用wep服务来代替会话?共享内存?数据库请注意,我不想将参数从web应用程序传递到类库,因为它不是一个流畅的代码。如果您需要类库中的当前会话,则将其作为构造函数中的参数传递。实际上,
HttpContext.current
即使在web应用程序中也不应再使用。这是一个静态类,很难测试/模拟。新的ASP.NET核心完全由IoC和依赖注入驱动。如果需要继承控制器(即poco控制器或服务)之外的HttpContext,则需要注入
IHttpContextAccessor