«System.InvalidOperationException» произошло в System.Private.CoreLib.dll, но не было обработано в коде пользователя - PullRequest
0 голосов
/ 07 июня 2019

Я использую внедрение зависимостей для доступа к информации, которая находится в сеансе моего приложения, через класс (компонент), но при выполнении доступа возникает ошибка: «В System произошло исключение типа« System.InvalidOperationException ».Private.CoreLib.dll, но не был обработан в коде пользователя: 'Сеанс не настроен для этого приложения или запроса.' '

Startup.cs

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
            .AddSessionStateTempDataProvider();

        //Adiciona uma implementação padrão na memória do IDistributedCache.
        services.AddDistributedMemoryCache();

        //Session
        services.AddSession(options =>
        {
            //Set a short timeout for easy testing.
            options.IdleTimeout = TimeSpan.FromMinutes(60);
            options.Cookie.HttpOnly = true;
            //Make the session cookie essential
            options.Cookie.IsEssential = true;
        });
        services.AddHttpContextAccessor();

        services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => false;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        //Adicionar os filtros nos controllers
        services.AddMvc(options =>
        {
            options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
            //adicionado por instância 
            options.Filters.Add(new CustomActionFilter());
            options.Filters.Add(new CustomAsyncActionFilter());
            //adicionado por tipo  
            options.Filters.Add(typeof(CustomActionFilter));
            options.Filters.Add(typeof(CustomAsyncActionFilter));
        });

        //Injeção de Dependência
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        services.AddSingleton<Common.AtualizarFiltros.IRefreshPF, Common.AtualizarFiltros.RefreshPF>();
    }

MyController.cs

public class PessoaFisicaController : Controller
{
    private readonly IRefreshPF _refreshPF;
    public PessoaFisicaController(IRefreshPF refreshPF)
    {
        _refreshPF = refreshPF;
    }

    public IActionResult Index()
    {
        return View();
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async void AddOrRemoveSexo([FromBody] Models.Json.JsonJsonAddOrRemoveSexo jsonInput)
    {
        await _refreshPF.AddOrRemoveSexoAsync(jsonInput);
    }
}

MyClass.cs

public interface IRefreshPF
{
    Task AddOrRemoveSexoAsync(Models.Json.JsonJsonAddOrRemoveSexo jsonInput);
}

public class RefreshPF : IRefreshPF
{
    private readonly IHttpContextAccessor _context;
    public RefreshPF(IHttpContextAccessor context)
    {
        _context = context;
    }

    public async Task AddOrRemoveSexoAsync(Models.Json.JsonJsonAddOrRemoveSexo jsonInput)
    {
        int idSexo = 0;
        //Modelos
        Model.SqlServer.Segmentacao.Sexo sexo = new Model.SqlServer.Segmentacao.Sexo();
        Models.Session.SessionResumoContagem sessionResumoContagem = new Models.Session.SessionResumoContagem();
        string[] array = jsonInput.id.Split('_');
        idSexo = int.Parse(array[1]);
        sexo = await Service.Filtros.GetByIdSexoAsync(idSexo);

        sessionResumoContagem = _context.HttpContext.Session.Get<Models.Session.SessionResumoContagem>("ResumoContagem");
        if (sessionResumoContagem == null)
        {
            sessionResumoContagem = new Models.Session.SessionResumoContagem();
            sessionResumoContagem.tipoPessoa = (int)Model.Enumeradores.TipoPessoa.PessoaFisica;
            _context.HttpContext.Session.Set<Models.Session.SessionResumoContagem>("ResumoContagem", sessionResumoContagem);
        }
        if (sessionResumoContagem.sexos == null)
        {
            sessionResumoContagem.sexos = new List<Model.SqlServer.Segmentacao.Sexo>();
        }           
    }
}

Ошибка в sessionResumoContagem = _context.HttpContext.Session.Get ("ResumoContagem");

Может кто-нибудь помочь?

1 Ответ

0 голосов
/ 10 июня 2019

'Сессия не была настроена для этого приложения или запроса.' '

Обычно эта ошибка возникает при доступе к объекту HttpContext.Session, когда он никогдазарегистрируйте промежуточное программное обеспечение Session до этого.

Убедитесь, что .UseSession() вызван:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        ...
        <b>app.UseSession(); </b>
        ... 

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        }); 
     }

Также имейте в виду, что UseSession() должен быть вызван перед использованием HttpContext.Session.По крайней мере, убедитесь, что он вызывается до UseMvc().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...