Asp.net mvc 4 在URL MVC4中隐藏参数

Asp.net mvc 4 在URL MVC4中隐藏参数,asp.net-mvc-4,Asp.net Mvc 4,我正在使用VS2010和MVC4(Razor)开发一个应用程序。我被Url参数卡住了。我能够实现登录方法。一旦我验证了用户,我希望他重定向到其他页面,所以我使用 RedirectToAction("UserAction","User",new{userID = "",password=""}); 但问题在于RedirectToAction使用了HTTTPGet,因此所有url参数userID和密码都是可见的 如何使用HTTPPost调用RedirectToAction 我们将非常感谢您的帮助。

我正在使用VS2010和MVC4(Razor)开发一个应用程序。我被Url参数卡住了。我能够实现登录方法。一旦我验证了用户,我希望他重定向到其他页面,所以我使用

RedirectToAction("UserAction","User",new{userID = "",password=""});
但问题在于RedirectToAction使用了HTTTPGet,因此所有url参数userID和密码都是可见的

如何使用HTTPPost调用RedirectToAction

我们将非常感谢您的帮助。 这是我的Login.cshtml

@using (Html.BeginForm("SignIn", "Login", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <legend>Log in Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.UserName)
@Html.TextBoxFor(m => m.UserName, new { id = "UserName" })
@Html.ValidationMessageFor(m => m.UserName)
</li>
<li>
@Html.LabelFor(m => m.Password)
@Html.PasswordFor(m => m.Password, new { id = "Password" })
@Html.ValidationMessageFor(m => m.Password)
</li>

</ol>   
<input type="submit" value="Log in"/>
</fieldset>
} 

Thanx和问候

TempData
-是您问题的答案:

TempData["userID "] = "some";
TempData["password"] = "some";
RedirectToAction("UserAction","User");

这可能有用。如果没有添加注释:)

TempData
-这是您问题的答案:

TempData["userID "] = "some";
TempData["password"] = "some";
RedirectToAction("UserAction","User");

这可能有用。如果没有添加注释:)

解决方案就像提到的@anaximander一样。成功登录后,将用户详细信息保存在随每个请求一起提交的加密cookie(例如FormsAuthenticationTicket)中,然后您可以通过解密cookie来验证每个操作调用的凭据。如果你想实现你自己的验证协议,你甚至可以实现你自己的AuthorizeAttribute,用它手工修饰所有的方法,或者在Global.asax(RegisterGlobalFilters内部)中全局注册它


你应该好好想想你是否真的需要保留密码。用户请求包含您的加密cookie这一事实可以用作用户已通过身份验证的指示。如果要确保用户有权运行某个操作方法,则用户id应该足够。这将使您无需存储密码,并在每次调用时重新检查密码,然后再检查用户是否有权运行该方法。

解决方案与前面提到的@anaximander类似。成功登录后,将用户详细信息保存在随每个请求一起提交的加密cookie(例如FormsAuthenticationTicket)中,然后您可以通过解密cookie来验证每个操作调用的凭据。如果你想实现你自己的验证协议,你甚至可以实现你自己的AuthorizeAttribute,用它手工修饰所有的方法,或者在Global.asax(RegisterGlobalFilters内部)中全局注册它


你应该好好想想你是否真的需要保留密码。用户请求包含您的加密cookie这一事实可以用作用户已通过身份验证的指示。如果要确保用户有权运行某个操作方法,则用户id应该足够。这将使您无需存储密码,并在每次调用时重新检查密码,然后再检查用户是否有权运行该方法。

如果您想使用HTTPPOST方法,请将方法的开头放在如下位置:

[HTTPPOST] 重定向到操作(您的参数){}


如果您想创建一个方法HTTPPOST,请将方法的开头放在如下位置:

[HTTPPOST] 重定向到操作(您的参数){}

这一开始只是一些评论,但我认为现在已经足够值得回答了

识别用户的最佳方法可能是使用包含识别令牌(而不是密码)的加密cookie,以便您可以检查用户是谁。cookie随每个请求一起发送,以静默方式发送,无需额外工作。如果你需要它,你可以检查一下。动作过滤器是一种很好的方法

ASP.NETMVC4内置了一个非常好的FormsAuth系统,其工作原理与此完全相同。那里有很多教程;这是一个很好的例子。它的实现非常简单,您可以覆盖工作的几个部分以使用您自己的数据库、您自己的用户模型等。用户提供凭证,您检查凭证,系统向用户提供cookie。
[Authorize]
过滤器检查该cookie,并使用它来决定是否允许用户执行他们试图执行的操作。也有基于角色的授权的范围,但如果您不需要,您可以忽略它

无论您做什么,您都不希望将用户的密码保留在任何地方。如果您最终使用自己的数据库存储用户,请不要将密码保存在其中-查找类似bcrypt的内容,使用它将密码与随机salt散列,并将其与salt值一起存储。要检查用户的登录,您需要对用户提供的盐进行散列,然后查看输出是否与您保存的散列匹配。密码在系统中保留的时间越短,攻击者可以获取密码的窗口就越窄。

这是从几个注释开始的,但我认为现在已经足够值得回答了

识别用户的最佳方法可能是使用包含识别令牌(而不是密码)的加密cookie,以便您可以检查用户是谁。cookie随每个请求一起发送,以静默方式发送,无需额外工作。如果你需要它,你可以检查一下。动作过滤器是一种很好的方法

ASP.NETMVC4内置了一个非常好的FormsAuth系统,其工作原理与此完全相同。那里有很多教程;这是一个很好的例子。它的实现非常简单,您可以覆盖工作的几个部分以使用您自己的数据库、您自己的用户模型等。用户提供凭证,您检查凭证,系统向用户提供cookie。
[Authorize]
过滤器检查该cookie,并使用它来决定是否允许用户执行他们试图执行的操作。也有基于角色的授权的范围,但如果您不需要,您可以忽略它

无论您做什么,您都不希望将用户的密码保留在任何地方。如果您最终使用自己的数据库存储用户,请不要将密码保存在其中-查找类似bcrypt的内容,使用它将密码与随机salt散列,并将其与salt值一起存储。要检查用户的登录,您需要将他们提供的盐与您的盐进行散列,然后查看