c# - 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 的原因。
解决方案
在发出 AJAX 请求时,您可能需要设置该withCredentials
标志。对于同站点请求,这不应该是必需的,但是您提到了 CORS 并且没有指定它是同站点。使用 jQuery,这只是意味着将其添加到xhrFields
您的 AJAX 选项对象中:
$.ajax({
...
xhrFields: {
withCredentials: true
}
});
其他库可能有不同的方法,但都应该有一些在XMLHttpRequest
对象上设置这个标志的方法。
推荐阅读
- graalvm - GraalVM Spring Native 错误:找不到主入口点类“com.springnative.demo.DemoApplication”
- react-native - 如何将 figma 线性梯度转换为 react-native 代码?
- animation - libGDX 粒子效果:可以逆转吗?
- php - 使用文件结构识别 Laravel 包
- delphi - 如何在 DLL 和主软件上使用 Midaslib(或 midas.dll)?
- saml - 为 ISV 添加最少的 SAML 支持
- algorithm - 旋转图像 - Java
- javascript - 如何通过 Chrome 扩展更改 Chrome 系统页面标题?
- javascript - 使按钮居中
- reactjs - 通过 Storybook 中的 args 传递的片段使用组件状态?