我已将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);
}