ASP Net Core 2.1 会话
Posted
技术标签:
【中文标题】ASP Net Core 2.1 会话【英文标题】:ASP Net Core 2.1 Session 【发布时间】:2019-04-03 01:23:28 【问题描述】:我目前正在.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 的原因。
【问题讨论】:
这里估计有问题services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); .AddDistributedMemoryCache();
改成services.AddDistributedMemoryCache(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
谢谢,但这对我不起作用。我不明白为什么邮递员工作,但不是在我的网站上。与 Cors 有什么关系?
【参考方案1】:
在发出 AJAX 请求时,您可能需要设置 withCredentials
标志。对于同站点请求,这不应该是必需的,但是您提到了 CORS 并且没有指定它是同站点。使用 jQuery,这意味着将其添加到您的 AJAX 选项对象中的 xhrFields
:
$.ajax(
...
xhrFields:
withCredentials: true
);
其他库可能有不同的方法,但都应该有某种方式在 XMLHttpRequest
对象上设置此标志。
【讨论】:
OHHHH 谢谢,非常感谢,您结束了几天的痛苦。如需进一步参考,我将留下正确答案:nuxt.config.js:/* ** Modules Config */ axios: credentials: true ,
In my Cors services.AddCors(opt => opt.AddPolicy("AllowSpecificOrigin", builder => builder.WithOrigins("http://localhost:3000") .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials() ); )
有没有办法在外部参数化我的应用程序的这个 URL? http://localhost:3000
以上是关于ASP Net Core 2.1 会话的主要内容,如果未能解决你的问题,请参考以下文章