2010-06-22 25 views
3

我在一些我以前沒有注意到的MVC應用程序中出現了一個奇怪的錯誤;它發生在我的應用程序(全線),也發生在我嘗試運行最新的Orchard drop(所以我知道它不只是我的代碼)。ASP.NET MVC AntiForgeryToken在GET時拋出它的異常?

基本上,問題是當我沒有提供AntiforgeryToken時,我得到了應該拋出的異常,但預計只有當我點擊GET操作時才能得到它;我第一次訪問一個頁面。

我已經追溯了在重建應用程序或重新部署應用程序時發生的行爲。例如,我在本地IIS服務器上運行我的站點,然後將設置更改爲在Cassini中運行(顯然,在中間重建等),並且出現錯誤。我放棄Orchard站點並重建它(同一VS)時也是如此。當我重新部署網站上的網站時也是如此。

我找到的解決方案是清除我的瀏覽器cookie,但是在對端點進行GET時遇到錯誤,或者我錯過了某些東西,這似乎很奇怪?

回答

2

這是因爲cookie由不同的環境加密。沒有指定加密機器密鑰,.NET使用埋在machine.config中的那個密鑰。

要修復在你的web.config添加手動機鍵定義:

<system.web>  
<machineKey validationKey="stuff" decryptionKey="stuff" validation="SHA1" decryption="AES" /> 

使用此生成一個:

http://aspnetresources.com/tools/keycreator.aspx

+0

我會試一試,並在工作時標記答案,謝謝。我沒有考慮過。 – Paul 2010-06-23 15:41:22

+0

工作過,感謝提示! – Paul 2010-06-28 15:16:35

1

您是否肯定您正在觸碰的動作未使用[ValidateAntiForgeryToken]屬性進行裝飾?只有擁有該屬性時纔會拋出此異常。

+0

陽性。這是在Create方法的GET方面。它沒有ValidateAntiForgeryToken屬性,雖然POST端有。這也是跨越多種不同的應用。 – Paul 2010-06-23 15:38:59