首页 > 解决方案 > ASP Net Core 2.1 会话

问题描述

我目前正在.Net Core 2.1 中使用带有 Nuxt 的 Vue 2 中的客户端应用程序开发 API,并且在 ASP .Net 中的会话中保存对象时遇到问题。在问这个问题之前,我已经查看了这个链接和其他链接,但没有什么能帮助我。事实证明,我已经用 Postman 尝试过,如果它有效,但我不明白为什么它不适用于我的应用程序。

这是我的 Startup.cs

public class Startup
    {
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

public IConfiguration Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => false;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });
// Add Database
// End Add Database
    services.AddCors(options => 
{
    options.AddPolicy("AllowSpecificOrigin", builder =>
    builder.AllowAnyHeader()
           .AllowAnyMethod()
           .AllowAnyOrigin()
));
});
 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    .AddDistributedMemoryCache();

    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromMinutes(1440);
        options.Cookie.HttpOnly = true;
        options.Cookie.IsEssential = true;
    });
}

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

    app.UseCookiePolicy();
    app.UseCors("AllowSpecificOrigin");
    app.UseSession();
    app.UseMvc();
}
}

在我的控制器中:

[Route("api/customer/[controller]")]
[ApiController]
public class ClientController : ControllerBase { ...

... 获取和设置 Session Var

var model = HttpContext.Session.GetString("User")

和其他控制器

HttpContext.Session.SetString("User", "Hello World")

每次我发出 ajax 请求时,HttpContext 都会更改 id,但邮递员不会更改 Id,这就是我可以恢复 cookie 的原因。

标签: c#sessionasp.net-corevuejs2nuxt.js

解决方案


在发出 AJAX 请求时,您可能需要设置该withCredentials标志。对于同站点请求,这不应该是必需的,但是您提到了 CORS 并且没有指定它是同站点。使用 jQuery,这只是意味着将其添加到xhrFields您的 AJAX 选项对象中:

$.ajax({
    ...
    xhrFields: {
        withCredentials: true
    }
});

其他库可能有不同的方法,但都应该有一些在XMLHttpRequest对象上设置这个标志的方法。


推荐阅读