AspNet Core 2 Нет службы для проблемы сессий типа «Microsoft.AspNetCore.Http.HttpContext» - PullRequest
0 голосов

Я использую AspNet Core 2 для создания приложения, у меня проблемы с сессиями, не могли бы вы помочь?

Точная ошибка:

Служба для типа «Microsoft.AspNetCore.Http.HttpContext» не зарегистрирована.

Я использую этот в качестве руководства, но, кажется, недостаточно.

в Startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddDistributedMemoryCache();
            services.AddMvc().AddSessionStateTempDataProvider();
            services.AddSession(options =>
            {
                // Set a short timeout for easy testing.
                options.IdleTimeout = TimeSpan.FromMinutes(1);
                options.Cookie.HttpOnly = true;
            });//<<==
        }
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }
        app.UseStaticFiles();

        app.UseSession();//<<==

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

            routes.MapSpaFallbackRoute(
                name: "spa-fallback",
                defaults: new { controller = "Home", action = "Index" });
        });
    }

в домашнем контроллере:

using Microsoft.AspNetCore.Http;

HttpContext.Session.SetString("TestName", user.UserName);
HttpContext.Session.SetString("TestVal", user.testVal.ToString());

на данный момент он работает , я могу перемещаться по разным страницам, и я могу использовать / проверять сеансы на стороне контроллера.

Но проблема в том, что я пытаюсь использовать сеансы в любом представлении

Вид сбоку:

@using Microsoft.AspNetCore.Http
@inject HttpContext HttpContext


@if (@HttpContext.Session.GetString("testVal").Equals("True"))
{
<td><input type="checkbox"></td>
}
else
{
<td><input type="checkbox" readonly></td>
}  

когда я пытаюсь получить или установить сессию cshtml / view, я получаю сообщение об ошибке

Не могли бы вы помочь?

Ответы [ 2 ]

0 голосов

я нашел способ использовать сторону просмотра сессий с asp net core 2

@using Microsoft.AspNetCore.Http
Session Value = @Context.Session.GetString("TestName")

Здесь

спасибо всем

0 голосов

временное исправление, пока я нахожу лучшее решение:

сторона контроллера

HttpContext.Session.SetString("TestName", user.UserName);
HttpContext.Session.SetString("TestVal", user.testVal.ToString());
HttpContext.Session.SetString("SecurityToken", securityToken);
ViewBag.TestVal = user.testVal.ToString();

вид сбоку

@if (ViewBag.TestVal.Equals("True"))
{
<td><input type="checkbox"></td>
}
else
{
<td><input type="checkbox" readonly></td>
} 

где токен безопасности - это случайное длинное значение, создаваемое в начале сеанса, это не лучший способ ... и вы должны проверять этот токен каждый раз, когда хотите обновить, создать или удалить что-то, что плюс AntiForgeryToken может быть лучше всего для тестов без продюсеров или первого подхода ...

если вы знаете лучший способ, пожалуйста, поделитесь

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