ASP.NET 5 / MVC 6,如何在类库中使用会话?

时间:2016-05-04 10:36:31

标签: 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。在.NET 4中,我可以安全地执行此操作。但它是.NET 4.6.1中的一个问题。 我怎么解决这个问题? 感谢

1 个答案:

答案 0 :(得分:1)

默认情况下为null,驱动 ASP.NET Core 1.0 的概念是可插拔的中间件。您需要明确选择加入会话。

您需要确保Microsoft.Extensions.Caching.Memory中存在Microsoft.AspNet.Sessionproject.json个依赖关系。然后在你的 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...
}

详细文章here。这应该就是你需要做的一切。

<强>更新

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

我需要您分享更多源代码,以便提供一个明确的示例。