无法在 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();