Проверьте файлы cookie и убедитесь, что файл cookie requestVerificationToken установлен правильно.Я сталкивался с этим раньше, когда все файлы cookie для сайта были настроены только на SSL, и я пытался запустить его через обычный HTTP локально, поэтому файл cookie никогда не принимался, поскольку передавался по незащищенным каналам.
Для меня это означало изменение строки в файле web.config в system.web / httpCookies на requireSSL = "false" ... но если это не то, что вы видите, я все равно посмотрю на вещи, которые могутсвязываться с вашими файлами cookie в системе (например, сброс сеанса, удаление файлов cookie вручную и т. д.).Если у вас есть атрибут проверки правильности в методах контроллера и вы все еще получаете его, это, вероятно, связано с тем, что что-то изменило или удалило этот файл cookie!
Редактировать: Кроме того, если у вас есть этона контроллере, а не только на методах POST, вот почему ... Это применимо только для формирования POST на сервере.
Вот простая пользовательская версия, которую вы МОЖЕТЕ применить к форме, которая будет автоматическипроверять на ВСЕХ методах действия POST:
/// <summary>
/// Custom Implementation of the Validate Anti Forgery Token Attribute.
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class CustomValidateAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
{
/// <summary>
/// The ValidateAntiForgeryTokenAttribute.
/// </summary>
private readonly ValidateAntiForgeryTokenAttribute _validator;
/// <summary>
/// The AcceptVerbsAttribute.
/// </summary>
private readonly AcceptVerbsAttribute _verbs;
/// <summary>
/// Initializes a new instance of the <see cref="CustomValidateAntiForgeryTokenAttribute"/> class.
/// </summary>
/// <param name="verbs">The verbs.</param>
public CustomValidateAntiForgeryTokenAttribute(HttpVerbs verbs) : this(verbs, null)
{
}
/// <summary>
/// Initializes a new instance of the <see cref="CustomValidateAntiForgeryTokenAttribute"/> class.
/// </summary>
/// <param name="verbs">The verbs.</param>
/// <param name="salt">The salt.</param>
public CustomValidateAntiForgeryTokenAttribute(HttpVerbs verbs, string salt)
{
_verbs = new AcceptVerbsAttribute(verbs);
_validator = new ValidateAntiForgeryTokenAttribute
{
Salt = salt
};
}
/// <summary>
/// Called when authorization is required.
/// </summary>
/// <param name="filterContext">The filter context.</param>
public void OnAuthorization(AuthorizationContext filterContext)
{
var httpMethodOverride = filterContext.HttpContext.Request.GetHttpMethodOverride();
var found = false;
foreach (var verb in _verbs.Verbs)
{
if (verb.Equals(httpMethodOverride, StringComparison.OrdinalIgnoreCase))
{
found = true;
}
}
if (found && !filterContext.RequestContext.RouteData.Values["action"].ToString().StartsWith("Json"))
{
_validator.OnAuthorization(filterContext);
}
}
}
Затем вы можете просто добавить следующее ко всем вашим контроллерам или к базовому контроллеру, если вы переопределяете и наследуете от одного:
[CustomValidateAntiForgeryToken(HttpVerbs.Post)]