地址栏中传递的 ViewModel 数据

ViewModel data being passed in address bar

我有修改密码的控制器。 用户更改密码并单击提交。 我有我的人 p 的视图模型。 我根本没有将它传递到我的成功页面。

return View("succsessFulLogin");

而且我还在

http://localhost:50010/Password/ChangePassword?AccountName=username&CurrentPassword=currentPassValue&NewPassword=newPassValue&NewPasswordCheck=newCheckPassValue

在地址栏中

这是我在页面上的代码:

@using (Html.BeginForm("ChangePassword", "Password", FormMethod.Get))
{
    @Html.HiddenFor(model => model.AccountName)
    <br />
    <div>
        <h4>@Html.LabelFor(m => m.CurrentPassword)</h4> @Html.PasswordFor(m => m.CurrentPassword, new { onkeydown = "capLock(event);" } ) @Html.ValidationMessageFor(m => m.CurrentPassword)
    </div>
    <br />
    <div>
        <h4>@Html.LabelFor(m => m.NewPassword)</h4> @Html.PasswordFor(m => m.NewPassword, new { onkeydown = "capLock(event);" }) @Html.ValidationMessageFor(m => m.NewPassword)
    </div>
    <br />
    <div>
        <h4>@Html.LabelFor(m => m.NewPasswordCheck)</h4> @Html.PasswordFor(m => m.NewPasswordCheck, new { onkeydown = "capLock(event);" }) @Html.ValidationMessageFor(m => m.NewPasswordCheck)
    </div>
    <br />
    <p>
        <button class="btn-lg" type="submit">@Global.SAVE</button>
    </p>
}

当您使用 HTTP GET 时,浏览器在 URl 中发送数据,这样您最多可以限制 2048 characters.

know more about HTTPGET and HTTPPOST

为了确保您的数据安全和受保护,将您的方法更改为 POST 像这样:

    @using (Html.BeginForm("ChangePassword", "Password" FormMethod.Post, null))
{}

然后将 [HTTpPost] 添加到 controller 中的 Action Method,例如:

    [HttpPost]
    public ActionResult ChangePassword(yourmodel model){}

我不同意 osman Rahimi。

使用 HTTP POST绝不比 HTTP GET 更安全!只要您通过 http 以明文形式传递所有内容,您就可以读取传入和传出服务器的任何内容,即使它没有显示在地址栏中。如果你想自己检查我,你所要做的就是下载 fiddler,检查你的页面生成的请求和响应,然后你自己看看。

在网上传输密码的正确方法是确保您使用的是 SSL 并对密码进行哈希处理。我绝不是这方面的专家,但我认为您会在这些答案中找到需要:

  1. Securely Transfer User Entered Password
  2. How to securely save and send login username/password?