Я пытаюсь получить доступ к некоторым переменным сеанса в приложении Razor Pages, но сталкиваюсь с ошибками NullReferenceException.
В настоящее время я устанавливаю переменные в методе в модели, связанной со страницей «логин пользователя»:
public void StoreUserData(string username, string name, int accesslevel)
{
HttpContext.Session.SetString("username", username);
HttpContext.Session.SetString("name", name);
HttpContext.Session.SetInt32("accesslevel", accesslevel);
}
Затем я вызываю этот метод (и метод, который получает данные для хранения), когда пользователь отправляет форму входа на странице (в сообщении):
public IActionResult OnPost()
{
(string username, string name, int accesslevel) = Login();
StoreUserData(username, name, accesslevel);
ViewData["username"] = HttpContext.Session.GetString("username");
return Page();
}
Я знаю, что переменные сеанса сохраняются и могут быть доступны (по крайней мере, на странице входа в систему), потому что строка "username" правильно отображается на странице с использованием ViewData, как показано в блоке выше.
Когда я пытаюсь получить доступ к тем же переменным сеанса на другой странице бритвы, это не работает.
Я хочу проверить переменные сеанса при загрузке страницы.Метод C # (часть модели страницы для второй страницы):
public (string username, string name, int accesslevel) GetUserData()
{
string username = HttpContext.Session.GetString("username");
string name = HttpContext.Session.GetString("name");
int accesslevel = Convert.ToInt32(HttpContext.Session.GetInt32("accesslevel"));
return (username, name, accesslevel);
}
И блок C # на html-странице для вызова этого метода (я не знаю лучшего способа сделать это при загрузке страницы):
@{
Test_1Model model = new Test_1Model();
(string username, string name, int accesslevel) = model.GetUserData();
<div>@username</div>
}
В данный момент я просто хочу отобразить одну из переменных сеанса на этой второй странице, чтобы проверить, все ли работает.
Наконец, в файле startup.cs: Настройка служб:
public void ConfigureServices(IServiceCollection services)
{
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(10);
});
services.AddHttpContextAccessor();
services.AddMemoryCache();
services.AddMvc();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
Конфигурирование:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Я знаю, что это много информации, но я старался быть максимально тщательным.Любая помощь с благодарностью.