MVC3中的AntiForgery cookie

时间:2014-03-24 16:29:18

标签: c# asp.net-mvc-3 asp.net-webpages antiforgerytoken

我想实现this solution来处理ajax请求中的防伪。我知道还有其他解决方案,但这是我最喜欢的解决方案。

问题是我必须处理System.Web.Webpages 1.0,所以我不能在我的代码中使用AntiForgeryConfig.CookieName。

public override void OnAuthorization(AuthorizationContext filterContext)
    {
        var request = filterContext.HttpContext.Request;

        //  Only validate POSTs
        if (request.HttpMethod == WebRequestMethods.Http.Post)
        {
            //  Ajax POSTs and normal form posts have to be treated differently when it comes
            //  to validating the AntiForgeryToken
            if (request.IsAjaxRequest())
            {
                string cookieName = AntiForgeryData.GetAntiForgeryTokenName(context.Request.ApplicationPath);
                var antiForgeryCookie = request.Cookies[AntiForgeryConfig.CookieName];

                var cookieValue = antiForgeryCookie != null
                    ? antiForgeryCookie.Value
                    : null;

                AntiForgery.Validate(cookieValue, request.Headers["__RequestVerificationToken"]);
            }
            else
            {
                new ValidateAntiForgeryTokenAttribute()
                    .OnAuthorization(filterContext);
            }
        }
    }

如何检索(以编程方式)Mvc3中防伪系统设置的cookie名称?我怀疑AntiForgery.Validate部分也是一个问题,但我之前会处理它。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

实际的Cookie名称始终从public void method() { while(count < 10000000) { AnimalBean animal = new WeakReference<AnimalBean>(new AnimalBean()).get(); //----------- HERE MY LOGIC ------------- } } 开始,带有一些后缀。所以你可以找到这样的cookie:

"__RequestVerificationToken"