【发布时间】:2019-04-17 18:34:08
【问题描述】:
下面是我的startup.cs代码,
public void ConfigureServices(IServiceCollection services){
services.AddMvc().AddJsonOptions(options =>{
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
});
services.AddDistributedMemoryCache();
services.AddSession(options => {
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromSeconds(36000);
options.Cookie.HttpOnly = true;
});
services.AddCors(options => {
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env{
if (env.IsDevelopment()){
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
//app.UseCors("CorsPolicy");
// global cors policy
app.UseCors(x => x
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
app.UseSession();
app.UseAuthentication();
app.UseMvc();
}
下面是在 session 中设置和获取 userid 的代码:
HttpContext.Session.SetInt32("UserId", user.Id);
int userId = (int)HttpContext.Session.GetInt32("UserId");
我在以不同于设置的操作的操作中读取会话时遇到异常。会话不工作的任何原因?
【问题讨论】:
-
你得到了什么异常?
-
如果我猜对了。您在
method A中设置HttpContext.Session.SetInt32("UserId", user.Id);,然后method A正在调用您尝试使用HttpContext.Session.SetInt32("UserId", user.Id);的method B? -
可空对象必须有值。
-
没有塞巴斯蒂安。如果它是相同的动作,那么我不需要会话本身。我们需要用于维护不同 HTTP 请求之间的状态的会话。我在不同的控制器操作中设置会话并在不同的控制器操作中获取它。
标签: c# session asp.net-web-api .net-core