簡體   English   中英

Session 在 ASP.Net Core 中不工作 Web API

[英]Session not working in ASP.Net Core Web API

我正在嘗試在 ASP.NET Core Web API (.NET Core 3.1) 中使用 session 功能。 作為測試,我按如下方式配置了我的項目。

  1. 安裝 NuGet package Microsoft.AspNetCore.Session

  2. Startup.csConfigureServices中添加服務方法。

services.AddDistributedMemoryCache();
services.AddSession();
  1. Startup.csConfigure中使用 session :
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseSession();
    
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}
  1. 在我的 controller 中的一條路線中設置一個 session 變量。
HttpContext.Session.SetString("currentUser", "value1");

但是,我不斷收到此錯誤。

{"type":"NullReferenceException","message":"Object reference not set to an instance of an object.","stackTrace":" at Api.Routes.MainRoute.Handler(ILogger`1 logger) in MainRoute.cs :line 16\n at Api.Controllers.MainController.MainRoute(String authorization) in MainController.cs:line 264"}

我該如何解決這個問題?

中間件的順序很重要。 在 UseRouting 之后和 MapRazorPages 和 MapDefaultControllerRoute 之前調用 UseSession。

Session 和 state 管理

將您的代碼更改為:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseSession();

    app.UseAuthorization();

    app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
}

我不確定,但這份文件幫助我設置了 session,這是我的啟動文件:

public void ConfigureServices(IServiceCollection services)
        {
            services.AddDistributedMemoryCache();

            services.AddSession(options =>
            {
                options.IdleTimeout = TimeSpan.FromSeconds(10);
                options.Cookie.HttpOnly = true;
                options.Cookie.IsEssential = true;
            });
            services.AddControllers();
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseSession();
            app.UseHttpsRedirection();

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM