【问题标题】:Session data is received NULL from one method to another method asp.net core 3会话数据从一种方法接收到 NULL 到另一种方法 asp.net core 3
【发布时间】:2021-04-03 12:28:51
【问题描述】:

我有一个 ASP.NET Core 3.1 Web API 应用程序。我试图将字符串值存储在会话中,当从客户端调用在会话中设置字符串的方法时,它很好并存储了值,但是当我从会话中调用另一个方法获取字符串时,它是空的。请帮我解决它。

启动 ConfigureServices:

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

        services.AddSession(options =>
        {
            options.Cookie.Name = "AdventureWorks.Session";
            options.IdleTimeout = TimeSpan.FromMinutes(20);
            options.Cookie.HttpOnly = true;
            options.Cookie.IsEssential = true; // make the session cookie Essential
        });

        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

        services.AddMvc();
   }

    public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
    {

        app.UseAbp(options => { options.UseAbpRequestLocalization = false; }); 

        app.UseCors(_defaultCorsPolicyName); // Enable CORS!

        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication();

        app.UseAbpRequestLocalization();

        app.UseSession();

        app.UseEndpoints();
  }

设置字符串的方法:

 public async Task<FileStreamResult> GetCaptchaImage()
 {  

        Captcha.Captcha captcha = new Captcha.Captcha();
        int width = 100;
        int height = 36;
        var captchaCode = captcha.GenerateCaptchaCode();
        var result = captcha.GenerateCaptchaImage(width, height, captchaCode);
        _httpContextAccessor.HttpContext.Session.SetString("CaptchaCode", result.CaptchaCode);
        Stream s = new MemoryStream(result.CaptchaByteData);
        return new FileStreamResult(s, "image/png");
   }

GetString 方法:

 public bool ValidateCaptchaCode(string userInputCaptcha)
    {
        var captchaValueInSession = _httpContextAccessor.HttpContext..GetString("CaptchaCode");
        var isValid = userInputCaptcha == captchaValueInSession;
        _httpContextAccessor.HttpContext.Session.Remove("CaptchaCode");
        return isValid;
    }

为空

var captchaValueInSession = _httpContextAccessor.HttpContext.Session.GetString("CaptchaCode");

如何从其他方法获取 Session 值

【问题讨论】:

    标签: c# asp.net session asp.net-core-3.1 session-state


    【解决方案1】:

    也可以在前端而不是在`api中验证验证码

    string rr = HttpContext.Session.GetString("CaptchaCode");
                    if (model.captchacode != rr)
                    {
                        ModelState.AddModelError(string.Empty, "Enter Valid Captcha");
                    }
    

    【讨论】:

    • 验证码的验证也可以在前端而不是在 api 中完成
    猜你喜欢
    • 1970-01-01
    • 2013-01-29
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    相关资源
    最近更新 更多