asp.net core 2.2升级和HttpSessionState在类库中不可用

时间:2018-12-24 21:07:43

标签: c# asp.net-core .net-core

当我继承了一个需要升级到.net core 2.2的项目时,我遇到了多个依赖项的问题。

在这里我想念HttpSessionState

private static string CollectionToHtmlTable(HttpSessionState collection)
    {
        // Converts HttpSessionState to NameValueCollection
        var nvc = new NameValueCollection();
        foreach (string item in collection)
        {
            nvc.Add(item, collection[item].ToString());
        }

        return CollectionToHtmlTable(nvc);
    }

如何在.net核心类库中访问HttpSessionState的一些好的代码示例?

1 个答案:

答案 0 :(得分:1)

Microsoft.AspNetCore.Session元软件包中包含的Microsoft.AspNetCore.App软件包提供了用于管理会话状态的中间件。 要启用会话中间件,启动必须包含:

  1. 任何IDistributedCache内存高速缓存。 IDistributedCache实现用作会话的后备存储。
  2. 调用AddSession中的ConfigureServices
  3. 调用UseSession中的Configure

代码:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddDistributedMemoryCache();

        services.AddSession(options =>
        {
            // Set a short timeout for easy testing.
            options.IdleTimeout = TimeSpan.FromSeconds(10);
            options.Cookie.HttpOnly = true;
        });

        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();
        app.UseSession();
        app.UseHttpContextItemsMiddleware();
        app.UseMvc();
    }
}
配置会话状态后,

HttpContext.Session可用。

HttpContext.Session在调用UseSession之前无法访问。

InvalidOperationException之后调用UseSession时,发生

UseMvc异常。

可以使用HttpContext.Session从Razor Pages PageModel类或MVC Controller类访问会话状态。此属性是ISession的实现。

ISession实现提供了几种扩展方法来设置和获取整数和字符串值。扩展方法位于Microsoft.AspNetCore.Http命名空间中(添加一个

using Microsoft.AspNetCore.Http;

声明以访问扩展方法) 项目引用Microsoft.AspNetCore.Http.Extensions程序包时。

访问类库中的Httpcontext:

HttpContext在控制器中可用,但是要访问其他类,您需要在类中插入IHttpContextAccessor。 要访问会话,请使用以下代码:-

var sessionValue =_context.HttpContext.Session.GetString("KeyName");

更多详细信息,请访问: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2