Вставить SessionExtensions Asp. net Core - PullRequest
0 голосов
/ 02 апреля 2020

Я использую приведенный ниже класс с именем SessionExtensions для установки и получения сложного объекта (класс пользователя)

public static class SessionExtensions
    {
        public static void Set<T>(this ISession session, string key, T value)
        {
            session.SetString(key, JsonSerializer.Serialize(value));
        }

        public static T Get<T>(this ISession session, string key)
        {
            var value = session.GetString(key);
            return value == null ? default : JsonSerializer.Deserialize<T>(value);
        }
    }

Я пытаюсь внедрить его в представление для отображения имени и фамилии пользователя, но все примеры используют Session.GetString вместо Get<User>

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Вы не вводите класс c. Это просто доступно. Вот что означает static. В частности, расширения будут естественным образом появляться в тех типах, которые они расширяют, если они находятся в доступном пространстве имен. Эта последняя часть, вероятно, ваша проблема. Например, если ваш класс расширения находится в Namspace.To.My.Extensions, то, по вашему мнению (или в _ViewImports.cshtml, вам нужно добавить @using Namespace.To.My.Extensions.

Вам 100% не нужно вводить IHttpContextAccessor . Представление уже имеет встроенный доступ к HttpContext, поскольку оно является частью конвейера запросов. Сеанс, в частности, также доступен напрямую. Поэтому все, что вам нужно:

@Session.Get<User>("user_login_credentionals").FirstName
0 голосов
/ 02 апреля 2020

Я только что нашел решение своих вопросов:

Сначала я должен включить и добавить в свое представление следующее:

@using Microsoft.AspNetCore.Http
@using MenaProjects.Util
@using MenaProjects.Models
@inject IHttpContextAccessor httpContextAccessor

Затем я набрал код html, чтобы получить доступ к моему сложный объект:

@(httpContextAccessor.HttpContext.Session.Get<User>("user_login_credentionals").FirstName)
...