Время от времени у меня была страшная проблема с проверкой MAC-адреса viewstate. Я запускаю свое приложение в веб-ферме и на всех веб-серверах устанавливаю одинаковое значение ключа компьютера приложения.
Я провел несколько экспериментов, и теперь у меня есть два вопроса относительно механизма защиты от подделки токенов:
1. Кажется, я получаю эту ошибку, хотя я не вызываю никаких действий с атрибутом [ValidateAntiForgeryToken] (проблема, кажется, возникает при рендеринге токена в представлении). Почему это происходит? Разве проверка не должна выполняться только при наличии атрибута. Проблема исчезнет, если файл cookie __RequestVerificationToken будет удален.
2. Разве файл cookie __RequestVerificationToken не должен быть файлом cookie сеанса и, следовательно, быть недействительным по окончании сеанса? Кажется, это не так?
Требуемый токен защиты от подделки не был предоставлен или был недействительным
в System.Web.Mvc.AntiForgeryDataSerializer.Deserialize (String
serializedToken)
в
System.Web.Mvc.HtmlHelper.GetAntiForgeryTokenAndSetCookie (String salt,
Строковый домен, строковый путь)
at
System.Web.Mvc.HtmlHelper.AntiForgeryToken (Строковая соль, Строковый домен,
Путь к строке)
на System.Web.Mvc.HtmlHelper.AntiForgeryToken ()
в
ASP.views_customer__customerlogin_ascx .__ Render__control1 (HtmlTextWriter
__w, управляющий параметрContainer)
в System.Web.UI.Control.RenderChildrenInternal (модуль записи HtmlTextWriter,
Сбор детей)
на
System.Web.UI.Control.RenderChildrenInternal (писатель HtmlTextWriter,
Сбор детей)
на
System.Web.UI.Page.Render (писатель HtmlTextWriter)
в
System.Web.Mvc.ViewPage.Render (писатель HtmlTextWriter)
в
System.Web.UI.Page.ProcessRequestMain (Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
на System.Web.UI.Page.ProcessRequest (Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
в System.Web.UI.Page.ProcessRequest () в
System.Web.UI.Page.ProcessRequest (контекст HttpContext)
в
System.Web.Mvc.ViewUserControl.ViewUserControlContainerPage.ProcessRequest (HttpContext
контекст)
на System.Web.Mvc.ViewPage.RenderView (ViewContext
viewContext)
at
System.Web.Mvc.ViewUserControl.RenderViewAndRestoreContentType (ViewPage
containerPage, ViewContext viewContext)
в
System.Web.Mvc.HtmlHelper.RenderPartialInternal (String
partalViewName, ViewDataDictionary viewData, Объектная модель, TextWriter
писатель, ViewEngineCollection viewEngineCollection)
в
System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial (HtmlHelper
htmlHelper, StringpartalViewName, Объектная модель) в
ASP.views_cart_index_aspx .__ Rendercontainer_main (HtmlTextWriter __w,
Управляющий параметрContainer)
at
System.Web.UI.Control.RenderChildrenInternal (писатель HtmlTextWriter,
Сбор детей) на
ASP.views_shared_site_master .__ Render__control1 (HtmlTextWriter __w,
Управляющий параметрContainer) в
System.Web.UI.Control.RenderChildrenInternal (писатель HtmlTextWriter,
Сбор детей)
на
System.Web.UI.Control.RenderChildrenInternal (писатель HtmlTextWriter,
ICollection children) в System.Web.UI.Page.Render (HtmlTextWriter
писатель)
на System.Web.Mvc.ViewPage.Render (писатель HtmlTextWriter)
at System.Web.UI.Page.ProcessRequestMain (Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest (Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
в System.Web.UI.Page.ProcessRequest () в
System.Web.UI.Page.ProcessRequest (контекст HttpContext)
в
System.Web.Mvc.ViewPage.ProcessRequest (контекст HttpContext) по адресу
ASP.views_cart_index_aspx.ProcessRequest (контекст HttpContext)
в
System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper. <> C__DisplayClass1.b__0 ()
вSystem.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper. <> C__DisplayClass4.b__3 ()at System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.Wrap [TResult] (Func`1 func)в System.Web.Mvc.HttpHandlerUtil.ServerExecuteHttpHandlerWrapper.Wrap (действие действия)в System.Web.HttpServerUtility.ExecuteInternal (обработчик IHttpHandler, модуль записи TextWriter, логический preserveForm, логический setPreviousPage, путь VirtualPath, файл VirtualPathPath, физическая строка String, ошибка исключения, ошибка String queryStringOverride)