C# 使用.Net Core创建会话时未保存会话
我是.Net新手,我正在构建一个web应用程序,当用户登录或注册并确认注册时,我想在其中创建一个会话。对于登录,我有一个razor页面:登录,它只是提示用户输入用户名和密码,这些用户名和密码应该在我的sql server中并经过验证。一旦它检查到有效的用户标志是正确的,我想创建会话并将用户发送到索引。然后在索引中,我想查看会话是否已创建,我想读取会话中的值并将其显示在索引视图中,以确认已捕获用户信息。C# 使用.Net Core创建会话时未保存会话,c#,html,asp.net-core,razor,C#,Html,Asp.net Core,Razor,我是.Net新手,我正在构建一个web应用程序,当用户登录或注册并确认注册时,我想在其中创建一个会话。对于登录,我有一个razor页面:登录,它只是提示用户输入用户名和密码,这些用户名和密码应该在我的sql server中并经过验证。一旦它检查到有效的用户标志是正确的,我想创建会话并将用户发送到索引。然后在索引中,我想查看会话是否已创建,我想读取会话中的值并将其显示在索引视图中,以确认已捕获用户信息。 我的Login.cs文件如下所示: public ActionResult OnPost(s
我的Login.cs文件如下所示:
public ActionResult OnPost(string UserName, string Password)
{
if (!ModelState.IsValid)
{
return Page();
}
if(accountService.ValidateUserLogin(UserName, Password) == 1)
{
string Email = accountService.UsernameGetEmail(UserName);
HttpContext.Session.SetString(Email, TempData["email"].ToString());
return RedirectToPage("/Index");
}
else
{
//report error to user
return Page();
}
}
这是我尝试在我的Index.cs页面中捕获会话信息的地方:
public void OnGet()
{
if (HttpContext.Session.Id != null)
{
SessionEmail = HttpContext.Session.GetString("Email");
ViewData["SessionEmail"] = SessionEmail;
}
}
这是一段html,我试图在视图中显示SessionEmail,但在index.cs文件中初始化SessionEmail时,它是空的
<div>
@{
if( ViewData["SessionEmail"] != null)
{
<p> Hello! @ViewData["SessionEmail"].ToString() </p>
}
}
</div>
@{
如果(ViewData[“SessionEmail”]!=null)
{
您好!@ViewData[“SessionEmail”].ToString()
}
}
希望你能在这里指出我的错误,以及我是如何尝试建立一个会话的。在我能够设置会话后,我将编辑布局的导航栏,以便在用户登录或未登录时,导航栏将发生更改。如果您能指出我如何使用会话进行此操作,这将非常好,也许:httpcontext.session.IsAvailable?另外,我的启动中也有addSession和useSession。试试这个:
HttpContext.Session.SetString(“Email”,Email);
原因是您在此处获得用户的电子邮件地址:
string Email=accountService.UsernameGetEmail(用户名);
然后尝试使用扩展方法将其保存到会话中。该方法将键
作为第一个参数,将值
作为第二个参数
稍后,您将使用“Email”的键调用扩展方法:
SessionEmail=HttpContext.Session.GetString(“电子邮件”);
因此,您需要使用相同的键设置值
:尝试以下操作:
HttpContext.Session.SetString(“Email”,Email);
原因是您在此处获得用户的电子邮件地址:
string Email=accountService.UsernameGetEmail(用户名);
然后尝试使用扩展方法将其保存到会话中。该方法将键
作为第一个参数,将值
作为第二个参数
稍后,您将使用“Email”的键调用扩展方法:
SessionEmail=HttpContext.Session.GetString(“电子邮件”);
因此,您需要使用相同的键设置值
: