代码之家  ›  专栏  ›  技术社区  ›  Chris

ASP.Net和DotNetNuke-为什么客户AuthorizeAttribute会覆盖ValidateAntiForgeryToken?

  •  0
  • Chris  · 技术社区  · 6 年前

    public class CodeWomplerAuthorizeAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            return SessionManager.CheckSession(SessionKeys.User)==true;
        }
    
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (SessionManager.CheckSession(SessionKeys.User) == false)
            {
                filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary 
                    {
                        { "action", "ActionName" },
                        { "controller", "ControllerName" }
                    });
            }
            else
                base.HandleUnauthorizedRequest(filterContext);
        }
    }
    

    以下是控制器中的一个示例函数:

        [HttpPost]
        [DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken]
        [CodeWomplerAuthorize]
        public string InitializeNew()
        {
            var techSheet = new TechSheet {WorkOrder = {CreateDate = DateTime.Now}};
            var empList = new WorkOrderEmployeeController().Gets().Recordset;
            return JsonConvert.SerializeObject(Json(new{techSheet,empList}));
        }
    

    我的自定义属性非常有效。但是,如果我包括[DotNetNuke.Web.Mvc.Framework.ActionFilters.ValidateAntiForgeryToken],我就会失败。

    如何在AuthorizeCore的覆盖中包括ValidateAntiForgeryToken?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Chris    6 年前

    这里有一个方法:

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var cookie = httpContext.Request.Cookies[AntiForgeryConfig.CookieName];
        AntiForgery.Instance.Validate(cookie?.Value, httpContext.Request.Headers["__RequestVerificationToken"]);` protected override bool AuthorizeCore(HttpContextBase httpContext)
        return SessionManager.CheckSession(SessionKeys.User)==true;
    }