如何在方法级别覆盖`ValidateAntiForgeryToken`?

时间:2016-04-13 15:22:40

标签: asp.net-mvc-4 antiforgerytoken

我在班级应用ValidateAntiForgeryToken属性。如下面的代码所示。

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

这个类有几个接受POST数据的方法和几个为GET操作公开的方法。我想为ValidateAntiForgeryToken方法禁用GET,而不更改类级别属性。我知道我可以通过更改所有POST方法并仅将ValidateAntiForgeryToken应用于他们来实现此目的。但我希望他们是一个简单的方法。

就像Authorize属性与AllowAnonymous一样,您可以在类级别应用Authorize属性,但随后可以通过应用AllowAnonymous来更改方法级别。< / p>

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

1 个答案:

答案 0 :(得分: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);
    }
}

或者稍后在文章中,它解释了如何创建自定义属性以跳过验证某些操作。