Ich habe eine KlasseASP.Net 5 (MVC 6) - Zugriff auf Session-Objekt in Sicht über einen Wrapper
public class SessionService : ISessionService
{
public const string SessionUserKey = "UserViewModel";
private readonly IHttpContextAccessor _httpContextAccessor;
private ISession _session => _httpContextAccessor.HttpContext.Session;
public SessionService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public UserViewModel LoggedInUser
{
get
{
return _session.GetObjectFromJson<UserViewModel>(SessionUserKey);
}
set
{
_session.SetObjectAsJson(SessionUserKey, value);
}
}
public void Destroy()
{
_session.Clear();
}
}
Eine Instanz dieser Klasse zu meinem Controller wie folgt injiziert:
Startup. cs
services.AddScoped<ISessionService, SessionService>();
AccountController.cs
public class AccountController : Controller
{
private readonly IUserAccountService _accountService;
private readonly ISessionService _sessionService;
public AccountController(IUserAccountService accountService, ISessionService sessionService)
{
_accountService = accountService;
_sessionService = sessionService;
}
}
möchten jedoch meiner Meinung nach ich das zur Zeit in Benutzer wie folgt angemeldet zuzugreifen:
@if(SomeClass.LoggedInUser != null){
// code removed for brevity
}
Wie kann ich dies erreichen, ohne dass die LoggedInUser
Eigenschaft meiner SessionService
Klasse statisch. Es scheint so, als müsste etwas statisch gemacht werden, um einen Zugang wie diesen zu haben. Aber ich habe mich gefragt, ob es einen besseren Weg gibt, dies zu erreichen. Und nein, ich möchte nicht die ViewBag
verwenden.
ich ASP.Net Identität bin nicht
Ja, das ist es! Obwohl es "ISessionService" anstelle von "IUserAccountService" sein sollte. Also habe ich '@inject WebProject.Services.ISessionService CurrentSessionService' und' @if (CurrentSessionService.LoggedInUser! = Null) {// ...} 'in meiner View-Datei. Danke vielmals. – hyde