即使我在本地主机上运行,我的 mvc 网站也给了我这个错误:
无法解密防伪令牌。如果此应用程序由 Web 场或群集托管,请确保所有计算机都运行相同版本的 ASP.NET 网页,并且配置指定显式加密和验证密钥。AutoGenerate 不能在集群中使用。
我使用了这个机器密钥:
<machineKey compatibilityMode="Framework20SP1" validationKey='AC0DA63E787522E3BA5D47D8FA0A46EB68BB89A35C6353D5E8D3D5CA416D0DA607E56C6D0861ED3B7194C3ED74C0CE79FE4CE2909F34A6CFBDE134C1A094CA40' decryptionKey='A68360896EF374401123C6C222A7AAD8D430DB4DE34938E1' validation='SHA1'/>
Run Code Online (Sandbox Code Playgroud)
但是还是没有用。另外,我从第三方提取了这个machinekey。我知道它不安全,但微软的方式太复杂了:使用 powershell 生成它?复杂的。然后用IIS?我的 IIS8 没有显示 machinekey 模块。所有这些东西到底是怎么回事。
好的,可能错误是由多个@html.antiforgerytoken 引起的。好吧,我确实有两个 antiforgerytoken,但是当我删除其中一个时,错误仍然存在。
我对这个问题感到非常沮丧。我希望有人会善意地提供帮助。相信那些MVC用户在开发MVC网站的时候也遇到过这种情况。就我而言,我只是一个新手,这是我部署的第一个 MVC 网站。
谢谢你的帮助
更新
控制器:
// POST: /Account/Manage
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Manage(ManageUserViewModel model)
{
bool hasPassword = HasPassword();
ViewBag.HasLocalPassword = hasPassword;
ViewBag.ReturnUrl = Url.Action("Manage");
if (hasPassword)
{
if (ModelState.IsValid)
{
IdentityResult result = await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.OldPassword, model.NewPassword);
if (result.Succeeded)
{
return RedirectToAction("Manage", new { Message = ManageMessageId.ChangePasswordSuccess });
}
else
{
AddErrors(result); …Run Code Online (Sandbox Code Playgroud)