c# - asp.net core 2.2升级并且类库中不提供HttpSessionState

标签 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 core 类库中的 HttpSessionState 的优秀代码示例?

最佳答案

Microsoft.AspNetCore.Session 包包含在 Microsoft.AspNetCore.App 元包中,提供用于管理 session 状态的中间件。 要启用 session 中间件,Startup 必须包含:

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

代码:

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 在配置 session 状态后可用。

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

UseMvc之后调用UseSession时,会发生

InvalidOperationException异常。

使用 HttpContext.Session 从 Razor Pages PageModel 类或 MVC Controller 类访问 session 状态。此属性是一个 ISession 实现。

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

using Microsoft.AspNetCore.Http;

获取扩展方法访问权限的语句) 当项目引用 Microsoft.AspNetCore.Http.Extensions 包时。

访问类库中的 Httpcontext:

HttpContext 在 Controller 中可用,但要访问其他类,您需要在类中注入(inject) IHttpContextAccessor。 要访问 session ,请使用以下代码:-

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

更多详细信息可以在以下位置找到: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/app-state?view=aspnetcore-2.2

关于c# - asp.net core 2.2升级并且类库中不提供HttpSessionState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53917697/

相关文章:

c# - 从在单独线程上运行的方法返回列表

c# - 为什么 .NET Core DI 更喜欢接受 IEnumerable<T> 的构造函数而不是无参数构造函数?

c# - uri 的相对路径

c# - 有没有一种简单而优雅的方法可以使 ICollection 在 C# 中更流畅?

c# - 如何在 ASP.NET Core 中设置默认区域?

c# - 使用 Kestrel 时可配置端口号吗?

c# - .Net Core 3 IStringLocalizer.WithCulture(CultureInfo) 已过时

c# - 如何将服务层验证消息传递回调用方?

c# - 将处理程序的结果转换为数组格式

asp.net - WS-Federation 登录 Asp.NET 5 MVC 6 ADFS