ile görünümünde oturum nesnesi erişme IASP.Net 5 (MVC 6) bir sarıcı
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();
}
}
Bu sınıfın bir örneği, aşağıdaki gibi zaman kontrolöre enjekte edilen bir sınıf bulunmaktadır. 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;
}
}
Ancak, bana göre böyle bir kullanıcı şu anda oturum açmış erişmek istediğiniz:
@if(SomeClass.LoggedInUser != null){
// code removed for brevity
}
nasıl SessionService
sınıf statik LoggedInUser
özelliğini yapmadan bunu başarabilirsiniz. Böyle bir şeye sahip olmak için statik bir şey yapmam gerekiyor gibi görünüyor. Ama bunu başarmanın daha iyi bir yolu olup olmadığını merak ediyordum. Ve hayır, ViewBag
'u kullanmak istemiyorum.
Ben ASP.Net Kimlik
Yep, budur! Her ne kadar "IUserAccountService" yerine "ISessionService" olmalıdır. Bu yüzden benim view dosyasında @Project WebProject.Services.ISessionService CurrentSessionService' ve '@if (CurrentSessionService.LoggedInUser! = Null) {// ...}' var. Çok teşekkürler. – hyde