2011-11-25 52 views
3

当我们有多个可能的表单发布到同一cshtml页面上的控制器时, Antiforgery验证不起作用。我们通过MVC3码时,我们发现问题是在这部分代码:如何在同一个MVC3页面上使用AntiForgery验证的多个Ajax表单?

if (!String.Equals(cookieToken.Value, formToken.Value, StringComparison.Ordinal)) { 
      // error: form token does not match cookie token 
      throw CreateValidationException(); 
} 

,我们有CSHTML是这样的:

@using (@Ajax.BeginForm()) { 
    @Html.AntiForgeryToken() 
    <input type="submit" class="buttonBlue" value="form1" /> 
} 

@using (@Ajax.BeginForm()) { 
    @Html.AntiForgeryToken() 
    <input type="submit" class="buttonBlue" value="form2" /> 
} 

你能帮我解决这个问题问题?我们发现,移除其中一个防伪令牌之后,似乎按预期工作。

我们尝试设置防伪的机器密钥,但它也没有工作。

问候。

回答

6

为了多次使用AntiForgeryToken,我执行以下操作。首先,在我看来的顶部,我添加以下行:

ViewBag.__RequestVerificationToken = @Html.AntiForgeryToken().ToString(); 

然后,在每个窗体,我需要的令牌,我添加以下内容:

@Html.Raw(ViewBag.__RequestVerificationToken) 
+0

感谢这个伟大的工程! –

相关问题