C# 使用.Net Core创建会话时未保存会话

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

我是.Net新手,我正在构建一个web应用程序,当用户登录或注册并确认注册时,我想在其中创建一个会话。对于登录,我有一个razor页面:登录,它只是提示用户输入用户名和密码,这些用户名和密码应该在我的sql server中并经过验证。一旦它检查到有效的用户标志是正确的,我想创建会话并将用户发送到索引。然后在索引中,我想查看会话是否已创建,我想读取会话中的值并将其显示在索引视图中,以确认已捕获用户信息。
我的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(“电子邮件”);
因此,您需要使用相同的
键设置