我正在使用AspNet Core 2构建应用程序,我遇到会话问题,你能帮忙吗?
确切错误:
没有类型的服务' Microsoft.AspNetCore.Http.HttpContext'已经注册。
我使用this作为指导,但似乎还不够。
在Startup.cs
中public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache();
services.AddMvc().AddSessionStateTempDataProvider();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = TimeSpan.FromMinutes(1);
options.Cookie.HttpOnly = true;
});//<<==
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseSession();//<<==
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapSpaFallbackRoute(
name: "spa-fallback",
defaults: new { controller = "Home", action = "Index" });
});
}
在家庭控制器中:
using Microsoft.AspNetCore.Http;
HttpContext.Session.SetString("TestName", user.UserName);
HttpContext.Session.SetString("TestVal", user.testVal.ToString());
到目前为止它似乎正在工作,我能够浏览不同的页面,我可以在控制器端使用/检查会话。
但问题是我试图在任何视图中使用会话
查看方:
@using Microsoft.AspNetCore.Http
@inject HttpContext HttpContext
@if (@HttpContext.Session.GetString("testVal").Equals("True"))
{
<td><input type="checkbox"></td>
}
else
{
<td><input type="checkbox" readonly></td>
}
当我尝试获取或设置会话时cshtml / view side我收到错误
你可以帮忙吗?答案 0 :(得分:0)
控制器端
HttpContext.Session.SetString("TestName", user.UserName);
HttpContext.Session.SetString("TestVal", user.testVal.ToString());
HttpContext.Session.SetString("SecurityToken", securityToken);
ViewBag.TestVal = user.testVal.ToString();
查看方
@if (ViewBag.TestVal.Equals("True"))
{
<td><input type="checkbox"></td>
}
else
{
<td><input type="checkbox" readonly></td>
}
其中安全令牌是会话开始时创建的随机长值,这不是最好的方法...并且每次要更新,创建或删除某些内容时都必须验证此令牌,加上AntiForgeryToken可能是非常适合非产品测试或第一次接种......
如果您知道更好的方式,请分享