回答

16

的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; 
} 

使用上述类global.asx文件将其添加到RegisterGlobalFilters方法:

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

这样做,每个[HttpPost]将检查如果Html.AntiForgeryToken()在视图中。

+1

您的过滤器提供程序是否继承自任何基类? – Paul 2011-06-15 03:00:22

+5

该代码将为应用程序的每个请求创建一个列表。它可以通过使用yield来改进:yield return new Filter(new ValidateAntiForgeryTokenAttribute(),FilterScope.Global,null); – ShadowChaser 2012-06-30 20:28:47

+1

链接到完整的类为clarities清酒:https://code.google.com/p/vnecoo/source/browse/trunk/Code/Oas2011/OAS/Helpers/AntiForgeryTokenFilterProvider.cs?r=148 – Jon 2013-11-07 10:41:21