为什么当我将带有代码的字符串从视图传递到控制器时会弹出它?



我已重置密码令牌:

string resetPasswordToken = await _userManager.GeneratePasswordResetTokenAsync(user);

在我从电子邮件链接重置密码后,我传递此令牌和电子邮件以查看:

[HttpGet]
public IActionResult ResetPassword([FromQuery] string token, string email)
{
var model = new ResetPasswordViewModel
{
Email = email,
Token = token
};
return View(model);
}

问题是当我尝试将此令牌从视图传递到控制器时,令牌在符号 + 或" "之前被裁剪。 我的观点:

<form 
method="post" action="reset">
<input name="Email" type="hidden" value=@Model.Email>
<input name="Token" type="hidden" value=@Model.Token/>
<div class="form-group">
<label name="NewPassword" class="control-label">New Password</label>
<input name="NewPassword" class="form-control" />
</div>
<div class="form-group">
<label name="ConfirmNewPassword" class="control-label">Confirm New Password</label>
<input name="ConfirmNewPassword" class="form-control" />
</div>
<div class="form-group">
<input type="submit" value="Save" class="btn btn-success" />
</div>
</form>

发布:

[HttpPost]
[Route("reset")]
public async Task<IActionResult> ResetPassword(ResetPasswordViewModel model)
{
if (!ModelState.IsValid)
return View(model);
var user = await _userManager.FindByEmailAsync(model.Email);
if (user == null)
return RedirectToAction("ResetPasswordConfirm");
var result = await _userManager.ResetPasswordAsync(
user, model.Token, model.NewPassword);
if (result.Succeeded)
return RedirectToAction("ResetPasswordConfirm");
foreach (var error in result.Errors)
ModelState.AddModelError(string.Empty, error.Description);
return View(model);
}

令 牌:

CfDJ8IgVu4V4NxlJoKOV2esH3C3b0PdYklCHqKIB5Qsh0bvnrX4AXaDWgnpJbwCRupsVEKuOYxPctOSe7VqQe+VMzEQna/oNfdB9G3NWxq05wnuLfERKVFiMXMaodDsMV9G6b+J7fJCv8i1QmzR6X/vg/fDNkhmm37m1rJf0TZ41LEiBgthYS9RC/Cg785SaBN0O3VbO+nW/9WRZU1DzIU/ik2/CgkW1gqu9/FszQxVy0GtC

裁剪后的令牌:

CfDJ8IgVu4V4NxlJoKOV2esH3C3b0PdYklCHqKIB5Qsh0bvnrX4AXaDWgnpJbwCRupsVEKuOYxPctOSe7VqQe

属性值周围缺少"

这:

<input name="Token" type="hidden" value=@Model.Token/>

应该是这样的:

<input name="Token" type="hidden" value="@Model.Token"/>

但是,您应该真正考虑使用标记帮助程序,而不是手动创建属性值,这样您就不必担心 HTML 编码,例如:

<input type="hidden" asp-for="Token" />

最新更新