Asp.net mvc 4 如何在方法级别重写“ValidateAntiForgeryToken”?

Asp.net mvc 4 如何在方法级别重写“ValidateAntiForgeryToken”?,asp.net-mvc-4,antiforgerytoken,Asp.net Mvc 4,Antiforgerytoken,我在类级别应用了ValidateAntiForgeryToken属性。如下面代码所示 [ValidateAntiForgeryToken, Authorize(Roles = "SuperUser")] public class ManageController : BaseController { ... } 这个类有几个方法接受POST数据,还有几个方法公开用于GET操作。我想为GET方法禁用ValidateAntiForgeryToken,而不更改类级属性。我知道我可以通过更改所有POS

我在类级别应用了
ValidateAntiForgeryToken
属性。如下面代码所示

[ValidateAntiForgeryToken, Authorize(Roles = "SuperUser")]
public class ManageController : BaseController
{
...
}
这个类有几个方法接受
POST
数据,还有几个方法公开用于
GET
操作。我想为
GET
方法禁用
ValidateAntiForgeryToken
,而不更改类级属性。我知道我可以通过更改所有
POST
方法并仅对它们应用
ValidateAntiForgeryToken
来实现这一点。但我希望他们的方法很简单

就像
Authorize
属性与
AllowAnonymous
一起工作一样,您可以在类级别应用
Authorize
属性,但随后可以通过应用
AllowAnonymous
在方法级别更改它

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

我想这篇文章会对你有所帮助。

通过添加自定义IAuthorizationFilter,您可以跳过检查获取

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

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

或者在文章的后面,它解释了如何创建一个自定义属性来跳过验证某些操作。

看看这个链接,基本上你可以创建一个过滤器,将过滤器添加到类中,然后过滤器会将ValidateAntiForgeryToken添加到post方法中。欢迎使用stackoverflow。请详细描述答案。当你的答案中有一个链接时,很可能该页面被删除,你的答案在将来对其他人毫无用处,这可能是因为我没有正确地阅读文章,并且犯了错误。我已经上传了代码,你能看一下吗?我还尝试使用基类。