0

我有以下操作方法:-

[OutputCache(Duration = 120, VaryByParam = "*")]
[CheckUserPermissions(Action = "Read", Model = "Switch")]
public ActionResult RackSwitch(int id, int page = 1)
        {
//code goes here

第一个动作过滤器将缓存数据 120 秒,而第二个动作过滤器将执行自定义授权检查,如果授权失败,将返回 _unauthrized 视图,如下所示:-

public class CheckUserPermissionsAttribute : ActionFilterAttribute
    {

        public string Model { get; set; }
        public string Action { get; set; }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            //code goes here
if (filterContext.HttpContext.Request.IsAjaxRequest())
                {

                    var viewResult = new JsonResult();
                    viewResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
                    viewResult.Data = (new { IsSuccess = "Unauthorized", description = "Sorry, you do not have the required permission to perform this action." });
                    filterContext.Result = viewResult;
                }
                else
                {
                    var viewResult = new ViewResult();

                    viewResult.ViewName = "~/Views/Errors/_Unauthorized.cshtml";
                    filterContext.Result = viewResult;
                }

            }

            base.OnActionExecuting(filterContext);
        }
    }
}

所以我的问题是天气动作过滤器的顺序?那么先做 Outputcache 然后自定义授权,与先做自定义授权然后 outputcache 不同吗?谢谢

4

1 回答 1

2

重要的不是属性的顺序,而是框架查找它们的顺序。在这种情况下,框架将首先处理 Authorize 属性,如果失败,它甚至不会知道 Caching 属性。

于 2014-01-03T12:55:59.293 回答