2016-04-13 28 views
0

我有ValidateAntiForgeryToken属性应用于课堂级别。如下面的代码所示。如何在方法级重写`ValidateAntiforgerToken`?

[ValidateAntiForgeryToken, Authorize(Roles = "SuperUser")] 
public class ManageController : BaseController 
{ 
... 
} 

这个类有几种方法,它接受POST数据和两个方法被暴露为GET操作。我想要禁用ValidateAntiForgeryTokenGET方法而不更改班级属性。我知道我可以通过更改所有POST方法并将ValidateAntiForgeryToken仅适用于他们来完成此操作。但我希望他们是一个简单的方法。

就像方式Authorize属性适用于随着AllowAnonymous在那里你可以在申请一流水平Authorize属性,但随后可以通过应用AllowAnonymous改变方法的水平。

[Authorize] 
public class AccountController : BaseController 
{ 
     [AllowAnonymous] 
     public ActionResult Login(string returnUrl) 
     {    
      return View(); 
     } 
} 
+0

看看这个链接http://stackoverflow.com/questions/5213345/how-can-i-set-the-validateantiforgerytoken-globally,基本上你可以创建一个过滤器,将过滤器添加到类然后过滤器将添加ValidateAntiForgeryToken只是发布方法 –

回答

0

我觉得这篇文章会帮助你。 http://prideparrot.com/blog/archive/2012/7/securing_all_forms_using_antiforgerytoken

通过添加自定义个IAuthorizationFilter你可以跳过检查GET

public class AntiForgeryAttribute: IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext authorizationContext) 
    { 
     if (authorizationContext.RequestContext.HttpContext.Request.HttpMethod != "POST") 
      return; 

     new ValidateAntiForgeryTokenAttribute().OnAuthorization(authorizationContext); 
    } 
} 

或稍后的文章中解释了如何创建一个自定义属性跳过验证了一些行动。

+0

嗨,欢迎来到stackoverflow。请更多地描述答案。当您的答案中有链接时,该页面可能会被删除,并且您的答案在将来对其他人无用 –

+0

可能是我没有正确跟踪文章并且犯了错误。我已经在https://www.dropbox.com/s/h5sbaoysbb0ayt7/AntifForgerySkip.zip?dl=0上传了代码,您可以请看看吗?我也尝试使用基类。 – ndd