2016-04-13 23 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