Html.AntiForgeryToken (), вызывающий ошибки после обновления до .NET 3.5 SP1 - PullRequest
5 голосов
/ 11 февраля 2009

Я только что обновился до .NET 3.5 SP1, и моя когда-то работающая страница ASP.NET MVC перестала работать.

При попытке загрузить страницу я получаю следующий YSOD

[CryptographicException: Padding is invalid and cannot be removed.]
   System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast) +7596702
   System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) +208
   System.Security.Cryptography.CryptoStream.FlushFinalBlock() +33
   System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo) +225
   System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +195

[ViewStateException: Invalid viewstate. 
    Client IP: 127.0.0.1
    Port: 
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6 (.NET CLR 3.5.30729)
    ViewState: hC6BC8KsuD/yoy2iG74bUZ8TYhGfuDDeIjh9fg/L18yr/E+1Nk/pjS5gyn9O+2jY
    Referer: http://localhost:1092/admin/product
    Path: /admin.aspx/product/edit/4193]

[HttpException (0x80004005): Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.]
   System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) +106
   System.Web.UI.ViewStateException.ThrowMacValidationError(Exception inner, String persistedState) +14
   System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +242
   System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) +4
   System.Web.Mvc.AntiForgeryTokenSerializer.Deserialize(String serializedToken) +73

Если я уберу строку

<%= Html.AntiForgeryToken() %>

Все снова работает, есть идеи, что может быть причиной этого? Я ожидал бы больше удачи в поиске решения, если бы это была проблема с MVC или .NET, так что я думаю, это как-то связано с моей конфигурацией.

Я попытался переустановить инфраструктуру MVC, чтобы проверить, произошла ли она, потому что я установил ее до SP1, но у меня все еще возникает та же проблема. Поиск Google и SO не привел к каким-либо твердым выводам.

Ответы [ 3 ]

15 голосов
/ 11 февраля 2009

Дох, только что решил.

Очистил кеш браузера и куки, и все снова работает нормально.

3 голосов
/ 20 июня 2011

Очистка кэша браузера невозможна, если сайт уже развернут, и вы выполняете обслуживание, включая обновление сборки ASP.NET MVC. Вот решение, которое я использовал:

@Html.AntiForgeryTokenReset() @* use this instead*@

вот метод расширения

public static MvcHtmlString AntiForgeryTokenReset(this HtmlHelper htmlHelper)
{
    try
    {
        return htmlHelper.AntiForgeryToken();
    } catch (Exception ex)
    {
        var request = HttpContext.Current.Request;
        request.Cookies.Clear();
        return htmlHelper.AntiForgeryToken();
    }
}
1 голос
/ 02 марта 2009

Похоже, эта проблема уже решена. Взгляните на http://forums.asp.net/p/1388671/2960554.aspx

...