我正在努力从网址中获取值,因此我可以在ASP.Net核心中使用它们。网址看起来像这样:
/ResetPassword?id=17&token=a1f5995d-54ab-48a4-adef-4c914b58aed2
我可以在第一个实例中使用如下方法获取Id和令牌:
[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和令牌。这就是表单的样子:
<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和Token来验证用户。我已经尝试将它们本地存储在控制器中,但这不起作用。
我是否需要有两个隐藏的输入来存储那些可以在表单中提交的值?我认为我想要实现的目标会更清晰,所以我发布了这个问题。
答案 0 :(得分:0)
您可以使用TempData
;
if (await _profileService.VerifyUser(id, token))
{
TempData["ResetPassword_id"] = id;
TempData["ResetPassword_token"] = token;
return View(new ResetPasswordViewModel { Id = id, Token = token });
}
然后获取id
和token
;
[Route("resetpassword")]
[HttpPost]
public async Task<IActionResult> ResetPassword(int id, string token,
string password, string confirmPassword)
{
var id = (int)TempData["ResetPassword_id"];
var token = (string)TempData["ResetPassword_token"];
if (await _profileService.VerifyUser(id, token))
{
//Do something with passwords
}
return View(new ResetPasswordViewModel { ErrorCode = 1 });
}