我目前正在.Net Core 2.1中开发API 在带有Nuxt的Vue 2中使用客户端应用程序,并且在ASP.Net中的会话中保存对象时遇到问题。 在问这个问题之前,我已经查看了this和其他链接,但是没有任何帮助。 事实证明,我已经在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 { ...
...获取并设置会话变量
var model = HttpContext.Session.GetString("User")
和其他控制器
HttpContext.Session.SetString("User", "Hello World")
每次我请求ajax时,HttpContext都会更改id,但是邮递员不会更改ID,这就是为什么我可以恢复cookie。
答案 0 :(得分:1)
在发出AJAX请求时,您可能需要设置withCredentials
标志。对于同一站点的请求,这不是必需的,但是您提到了CORS,但未指定它是同一站点。使用jQuery,这只是意味着将其添加到您的AJAX选项对象中的xhrFields
中:
$.ajax({
...
xhrFields: {
withCredentials: true
}
});
其他库的方法可能不同,但是所有库都应具有在XMLHttpRequest
对象上设置此标志的某种方式。