La clase follwing permite hacer esto con un 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;
}
Para utilizar la clase por encima de añadir esto al método RegisterGlobalFilters
en global.asx
archivo:
...
FilterProviders.Providers.Add(new AntiForgeryTokenFilterProvider());
..
Haciendo esto, cada [HttpPost]
comprobará si el Html.AntiForgeryToken()
está en la vista.
¿Su proveedor de filtros hereda de cualquier clase base? – Paul
El código hará que se cree una lista para cada solicitud a la aplicación. Se puede mejorar usando yield: yield return new Filter (new ValidateAntiForgeryTokenAttribute(), FilterScope.Global, null); – ShadowChaser
enlace a toda la clase por cuestiones de claridad: https://code.google.com/p/vnecoo/source/browse/trunk/Code/Oas2011/OAS/Helpers/AntiForgeryTokenFilterProvider.cs?r=148 – Jon