Как я могу установить ValidateAntiForgeryToken глобально

Безопасность в первую очередь.

Лучшие практики MVC рекомендуют добавлять атрибут [ValidateAntiForgeryToken] к каждому действию [HttpPost].

Как я могу применить это правило в одной уникальной точке приложения?

Ответы

Ответ 1

Класс follwing позволяет сделать это с помощью FilterProvider

public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
    List<Filter> result = new List<Filter>();

    string incomingVerb = controllerContext.HttpContext.Request.HttpMethod;

    if (String.Equals(incomingVerb, "POST", StringComparison.OrdinalIgnoreCase))
    {
        result.Add(new Filter(new ValidateAntiForgeryTokenAttribute(), FilterScope.Global, null));
    }

    return result;
}

Чтобы использовать вышеприведенный класс, добавьте это в метод RegisterGlobalFilters в файле global.asx:

...    
FilterProviders.Providers.Add(new AntiForgeryTokenFilterProvider ());
..

Выполняя это, каждый [HttpPost] проверяет, находится ли Html.AntiForgeryToken() в представлении.