Доступ к объекту сеанса внутри представления Asp Core 2

Я хочу показать Session в поле зрения. Это возможно? Я пытаюсь с этим, на мой взгляд

<div class="content-header col-xs-12">
   <h1>Welcome, @HttpContext.Session.GetString("userLoggedName")</h1>
</div>

Но я получаю сообщение об ошибке

Код серьезности Описание Ошибка состояния подавления строки файла проекта CS0120 Требуется ссылка на объект для нестатического поля, метода или свойства «HttpContext.Session»

Любая помощь, я буду признателен. Спасибо


person Andhika Kurnia Aufa Azham    schedule 22.10.2017    source источник


Ответы (1)


Вы можете внедрить реализацию IHttpContextAccessor в свое представление и использовать ее для получения объекта Session.

@using Microsoft.AspNetCore.Http
@inject IHttpContextAccessor HttpContextAccessor
<h1>@HttpContextAccessor.HttpContext.Session.GetString("userLoggedName")</h1>

Предполагая, что у вас уже есть все настройки для включения сеанса в классе Startup.

public void ConfigureServices(IServiceCollection services)
{
    services.AddSession(s => s.IdleTimeout = TimeSpan.FromMinutes(30));
    services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSession();  // This line is needed

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

    });
}
person Shyju    schedule 22.10.2017
comment
Да. Мы можем сделать это сейчас с ядром asp net. Не нужно передавать вещи через ViewBag или около того. ;) - person Shyju; 22.10.2017
comment
Но я получаю это The type or namespace name 'IHttpContextAccessor' could not be found, и я уже настроил включение сеанса в классе Startup. - person Andhika Kurnia Aufa Azham; 22.10.2017
comment
Вы должны добавить @using Microsoft.AspNetCore.Http в верхнюю часть вашего представления. Я обновил ответ с этим. - person Shyju; 22.10.2017
comment
но почему?? почему Microsoft делает это со всеми своими поклонниками? - person أحمد صوالحة; 20.03.2019
comment
Для всех остальных вам также понадобится services.AddHttpContextAccessor() в ConfigureServices(), если вы получите эту ошибку от @AndhikaKurniaAufaAzham. - person Jason; 25.02.2020