Есть еще один способ сделать это. С ним вам не нужно грабить сессию.
Я расскажу вам, как я это сделал.
Шаг 1
Создайте постоянный файл, который мы будем использовать в наших представлениях позже
using System;
namespace MyProject.CONSTANTS
{
public static class Constants
{
public static String USER_ENTITY
{
get
{
return "USER_ENTITY";
}
}
}
}
Шаг 2
Создайте класс уровня приложения AppUser.cs
и интерфейс для того же IAppUser
namespace MyProject.Configurations.Interface
{
public interface IAppUser
{
UserDto UserEntity { get; }
}
}
и
namespace MyProject.Configurations
{
public class AppUser : IAppUser
{
private IHttpContextAccessor httpContextProvider;
public AppUser(IHttpContextAccessor _httpContextProvider)
{
httpContextProvider = _httpContextProvider;
}
public UserDto UserEntity
{
get
{
return httpContextProvider.HttpContext.Session.Get<UserDto>(Constants.USER_ENTITY);
}
}
}
}
Шаг 3
Теперь, когда вы получите данные, сохраните их как показано ниже
HttpContext.Session.Set(Constants.USER_ENTITY, result); //here result is type of `UserDto.cs` class
Что мы сделали выше
Мы сохранили наш сеанс в константах, которые мы будем использовать в представлениях позже с внедрением зависимостей.
Шаг 4
У нас есть общее представление _viewImports.cshtml
, в котором есть все внедрения зависимостей.
Мы добавим наш интерфейс IAppUser
в это представление, которое теперь доступно для всех представлений.
в _viewImports.cshtml
выполните следующие действия -
@using MyProject
@using Microsoft.Extensions.Options;
@inject MyProject.Configurations.Interface.IAppUser AppUser //AppUser is an aleas
Теперь в любом представлении вы можете использовать свойства интерфейса IAppUser
, который разрешен с помощью класса AppUser.cs
.
Скажите, если UserDto.cs
имеет свойство как
public int ID {get;set;}
Вы можете использовать его как - @AppUser.UserEntity.ID
Вот и все