c# - 无法访问我的 Asp.Net Core 项目中的帮助程序类中的 Session 对象
问题描述
我正在尝试访问我的 ASP.NET Core 2.1 项目中的帮助程序类中的 HttpContext.Session 对象。
当我尝试访问 HttpContext.Session 时,出现以下错误。
CS0120 非静态字段、方法或属性“HttpContext.Session”需要对象引用
使用 .NET 4.x ASP.NET,可以使用“HttpContext.Current.Session”轻松访问它。
这是我的课:
public class MySession
{
public void Foo()
{
HttpContext.Session.SetString("Name", "The Doctor"); // will not work
HttpContext.Session.SetInt32("Age", 773); // will not work
}
}
这是我的 Startup.cs:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
// Set a short timeout for easy testing.
options.IdleTimeout = System.TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true;
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// In production, the Angular files will be served from this directory
services.AddSpaStaticFiles(configuration =>
{
configuration.RootPath = "ClientApp/dist";
});
services.Configure<ServiceSettings>(Configuration.GetSection("ServiceSettings"));
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseSession();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseSpaStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
app.UseSpa(spa =>
{
// To learn more about options for serving an Angular SPA from ASP.NET Core,
// see https://go.microsoft.com/fwlink/?linkid=864501
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
}
}
我需要在 MySession 类中注入一些东西吗?
解决方案
您仍然可以Session
通过HttpContext
. 您必须通过 访问会话IHttpContextAccessor
,顾名思义,这将允许访问HttpContext
外部的控制器和其他将其作为本地成员的框架类。
首先,您需要将访问器添加到 DI 容器。
services.AddHttpContextAccessor();
从那里您需要将其注入所需的类并访问所需的成员
public class MySession {
IHttpContextAccessor accessor;
public MySession(IHttpContextAccessor accessor) {
this.accessor = accessor;
}
public void Foo() {
var httpContext = accessor.HttpContext;
httpContext.Session.SetString("Name", "The Doctor");
httpContext.Session.SetInt32("Age", 773);
}
}
推荐阅读
- mongodb - MongoDB on Docker for Windows ~ 导出/导入数据
- networking - 如何调试 Istio 特使连接问题?
- python - 设置描述符的默认(初始)值
- mysql - SQL 主键 (ID) 自动从头开始
- git - 如果我想用 origin master 覆盖 origin qa,“git push origin master:qa --force”是否有效?
- git - git - Master 构建正常,但是从 master 获取干净的分支会使构建失败
- jquery - 自定义客户端验证 jQuery 适配器不会在 ASP.Net Core 中触发
- dart - Dart如何声明列表的可增长列表
- python - IndexError:列表索引超出范围,使用 for 循环中的索引
- laravel - 为什么我不能在 Laravel 6 中将数据插入到 db 中?