Невозможно использовать HttpContext.Session в ядре asp. net. - PullRequest
1 голос
/ 21 февраля 2020

Я добавил app.UseSession(); к моему автозагрузке. Настройте и services.AddSession() к моим ConfigureServices.

Теперь, если я попытаюсь использовать Session, как это:

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

Я получаю "ссылка на объект требуется для нестатического c поля, метода или свойства, '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 CalculationMonitor.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("CalculationType", tableName);
            }
        }
    }

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

В вашем классе добавьте 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.AddHttpContextAccessor(); после services.AddControllersWithViews();

0 голосов
/ 21 февраля 2020

Вне этого класса, Используйте это, чтобы получить текущий HttpContext.

HttpContext context = HttpContext.Current;

Затем вставьте его в конструктор этого класса. у вас должно быть что-то вроде этого:

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