【发布时间】:2018-01-03 11:44:30
【问题描述】:
我正在努力从 url 中获取值,以便可以在 ASP.Net 核心中使用它们。网址将如下所示:
/ResetPassword?id=17&token=a1f5995d-54ab-48a4-adef-4c914b58aed2
我可以在第一个实例中通过如下方法获取 Id 和 Token:
[Route("resetpassword")]
public async Task<IActionResult> ResetPassword(int id, string token)
{
if (await _profileService.VerifyUser(id, token))
{
return View(new ResetPasswordViewModel { Id = id, Token = token });
}
return View(new ResetPasswordViewModel { ErrorCode = 1 });
}
如您所见,我进行了检查以确保可以验证用户。然后,这会将用户带到另一个屏幕,在那里他们填写几个输入并点击提交按钮。我为此使用 HTTP 发布,所以我可以获取用户的输入,但是我无法锻炼如何再次检索 Id 和 Token。这是表单的样子:
<form method="post" asp-controller="Profile" asp-action="ResetPassword"
asp-route-returnUrl="@Context.Request.Query["returnUrl"]">
<img class="card-img-top user-image" src="~/images/user.svg" alt="Card image cap">
<div class="form-group row">
<div class="col">
<input type="password" class="form-control" asp-for="Password" placeholder="New Password" />
</div>
</div>
<div class="form-group row">
<div class="col">
<input type="password" class="form-control" asp-for="ConfirmPassword" placeholder="Confirm Password" />
</div>
</div>
<div class="form-group row">
<div class="col">
<button class="btn btn-success" type="submit" name="button" style="width: 100%;">Reset Password</button>
</div>
</div>
</form>
然后这是 HTTP Post 操作:
[Route("resetpassword")]
[HttpPost]
public async Task<IActionResult> ResetPassword(int id, string token,
string password, string confirmPassword)
{
if (await _profileService.VerifyUser(id, token))
{
//Do something with passwords
}
return View(new ResetPasswordViewModel { ErrorCode = 1 });
}
因此,我可以检索发布到此方法的密码,但我无法使用 Id 和令牌再次验证用户。我尝试将它们本地存储在控制器中,但这不起作用。
我是否需要两个隐藏的输入来存储可以在表单中提交的值?我认为对于我想要实现的目标会有一个更清洁的解决方案,所以我发布了这个问题。
【问题讨论】: