即使配置后也无法在 Pagemodel 中使用会话

我正在尝试在我的 asp.net core Web 应用程序中使用 HttpContext.Session 但遇到麻烦。访问会话会导致 InvalidOperationException,并显示消息“尚未为此应用程序或请求配置会话”。


我四处搜索,您必须添加一些代码才能启动,即添加会话并使用它。(我还添加了 Nuget 包 AspNetCore.Session)。


现在,当我尝试在 PageModel 代码隐藏中访问 Session (HttpContext.Session) 时。它抛出异常并显示上面段落中指定的消息。除了你必须在我已经完成的启动代码中进行设置之外,我找不到更多详细信息。我的启动代码如下:


    public void ConfigureServices(IServiceCollection services)

    {

        services.Configure<CookiePolicyOptions>(options =>

        {

            // This lambda determines whether user consent for non-essential cookies is needed for a given request.

            options.CheckConsentNeeded = context => true;

            options.MinimumSameSitePolicy = SameSiteMode.None;

        });


        services.AddHttpClient();


        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);


        services.AddDistributedMemoryCache();

        services.AddSession();


    }


    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)

    {

        if (env.IsDevelopment())

        {

            app.UseDeveloperExceptionPage();

        }

        else

        {

            app.UseExceptionHandler("/Error");

            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.

            app.UseHsts();

        }


        app.UseHttpsRedirection();

        app.UseStaticFiles();

        app.UseCookiePolicy();

        app.UseSession();

        app.UseMvc();

    }

帖子上的页面模型是我尝试访问它的方式:


        public async void OnPostAsync()

        {

            //Some async stuff here.

            //Session throws exception

            HttpContext.Session.SetString("something", "something");

        }


慕村9548890
浏览 136回答 1
1回答

一只甜甜圈

您似乎无法访问静态Sessionvia&nbsp;HttpContext,您需要做的是在ConfigurationServices方法 add中,services.AddHttpContextAccessor();这将让您注入IHttpContextAccessor到页面模型构造函数中,这将具有您设置的会话。确保将 Session 设置为构造函数中的成员变量,因为通过 Post 方法中的 HttpSession 访问它会导致同样的问题。
打开App,查看更多内容
随时随地看视频慕课网APP