2011-11-25 39 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

感謝這個偉大的工程! –

相關問題