Я уже искал похожие вопросы, но, поскольку некоторые синтаксисы изменились, я еще не нашел ответ, который ищу.
Я пытаюсь передать UserID из Login / HomeController , поэтому все контроллеры / представления приложения могут получить к нему доступ. Логин на данный момент жестко запрограммирован, так как я просто пытаюсь передать значение прямо сейчас.
Session["key"]
не работает, как и HttpContext.Current
, которого даже нет в последней версии MVC. В самом HomeController я могу добавлять значения с помощью HttpContext.Session.SetString(Key, "string")
, но я не знаю, как получить к нему доступ в других контроллерах / представлениях.
Я нашел IHttpContextAccessor
, но так как я должен передать это как параметр в каждом отдельном конструкторе во всем классе, который я хочу использовать, и я уже передаю параметр кеша, это кажется скорее «излишним»
Нет лучшего способа передать UserID всему контроллеру?
Это мой startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddSingleton<ILocationContainer, LocationContainer>();
services.AddDistributedMemoryCache();
services.AddHttpContextAccessor();
services.AddSession(options => {
options.IdleTimeout = TimeSpan.FromMinutes(20);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseAuthorization();
app.UseSession();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
Это мой код в контроллере
public IActionResult Login()
{
HttpContext.Session.SetString(UserAccount, "blabla");
HttpContext.Session.SetString(UserRole, "admin");
return RedirectToAction("Index", "Home");
}