无法在 asp.net 核心中使用 HttpContext.Session
Cannot use HttpContext.Session in asp.net core
我已将 app.UseSession();
添加到我的 startup.Configure 并将 services.AddSession()
添加到我的 ConfigureServices。
现在,如果我尝试像这样使用会话:
HttpContext.Session.SetString("Type", tableName);
我收到“非静态字段、方法或 属性、'HttpContext.Session' 需要对象引用”
但是,如果我尝试像这样实例化它:
HttpContext context = new HttpContext();
它说:“无法创建抽象 class 或接口“HttpContext”的实例
如何访问会话?
IQuery.cs
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
namespace AppName.Services
{
public interface IQuery
{
List<Dictionary<string, string>> GetListOfDatabases(string dbName);
}
public class InMemoryIquery : IQuery
{
public List<Dictionary<string, string>> GetListOfDatabases(string tableName)
{
if(tableName != null)
{
HttpContext.Session.SetString("Type", tableName);
}
}
}
在此 class 的外部,使用此获取当前 HttpContext。
HttpContext context = HttpContext.Current;
然后注入到这个class的构造函数中。你一定有这样的东西:
public InMemoryIquery(HttpContext httpContext)
{
httpContext.Session.SetString("CalculationType", tableName);
}
在你的 class 中将 IHttpContextAccessor
添加到你的构造函数中并像这样使用
public class InMemoryIquery : IQuery
{
private IHttpContextAccessor _httpContextAccessor;
public InMemoryIquerty(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public List<Dictionary<string, string>> GetListOfDatabases(string tableName)
{
if(tableName != null)
{
_httpContextAccessor.HttpContext.Session.SetString("CalculationType", tableName);
}
}
}
在您的 ConfigureServices 中,在 services.AddControllersWithViews();
之后添加以下行 services.AddHttpContextAccessor();
我已将 app.UseSession();
添加到我的 startup.Configure 并将 services.AddSession()
添加到我的 ConfigureServices。
现在,如果我尝试像这样使用会话:
HttpContext.Session.SetString("Type", tableName);
我收到“非静态字段、方法或 属性、'HttpContext.Session' 需要对象引用”
但是,如果我尝试像这样实例化它:
HttpContext context = new HttpContext();
它说:“无法创建抽象 class 或接口“HttpContext”的实例
如何访问会话?
IQuery.cs
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
namespace AppName.Services
{
public interface IQuery
{
List<Dictionary<string, string>> GetListOfDatabases(string dbName);
}
public class InMemoryIquery : IQuery
{
public List<Dictionary<string, string>> GetListOfDatabases(string tableName)
{
if(tableName != null)
{
HttpContext.Session.SetString("Type", tableName);
}
}
}
在此 class 的外部,使用此获取当前 HttpContext。
HttpContext context = HttpContext.Current;
然后注入到这个class的构造函数中。你一定有这样的东西:
public InMemoryIquery(HttpContext httpContext)
{
httpContext.Session.SetString("CalculationType", tableName);
}
在你的 class 中将 IHttpContextAccessor
添加到你的构造函数中并像这样使用
public class InMemoryIquery : IQuery
{
private IHttpContextAccessor _httpContextAccessor;
public InMemoryIquerty(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public List<Dictionary<string, string>> GetListOfDatabases(string tableName)
{
if(tableName != null)
{
_httpContextAccessor.HttpContext.Session.SetString("CalculationType", tableName);
}
}
}
在您的 ConfigureServices 中,在 services.AddControllersWithViews();
services.AddHttpContextAccessor();