无法在asp.net核心中使用HttpContext.Session



我已将app.UseSession();添加到启动中。Configure和services.AddSession()到我的ConfigureServices。

现在,如果我尝试像这样使用会话:

HttpContext.Session.SetString("Type", tableName);

我得到了";非静态字段、方法或属性"HttpContext.Session"需要对象引用;

但是,如果我尝试这样实例化它:HttpContext context = new HttpContext();

上面写着:";无法创建抽象类或接口"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);
}
}
}

在类中,将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();

在这个类的外部,使用this获取当前HttpContext。

HttpContext context = HttpContext.Current;

然后将它注入到这个类的构造函数中。你一定有这样的东西:

public InMemoryIquery(HttpContext httpContext)
{
httpContext.Session.SetString("CalculationType", tableName);
}

最新更新