0

问题
创建一个IAuthorizeAttribute将在默认 MVC AuthorizeAttribute 之前执行的自定义。默认 AuthorizeAttribute 似乎总是在我的自定义属性之前运行。

我尝试过的事情

  • 我创建了一个继承自 IAuthorizationFilter 的自定义属性。
  • 我已经将此属性注册为全局过滤器,如下所示:
    filters.Add(new HandleCrossDomainAuthenticationAttribute() { Order = 1 });
  • 我已经阅读了有关 msdn 上的操作过滤器:http: //msdn.microsoft.com/en-us/library/dd381609.aspx

自定义属性

public class HandleCrossDomainAuthenticationAttribute : FilterAttribute, IAuthorizationFilter
{
    #region IAuthorizationFilter Members

    void IAuthorizationFilter.OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }

        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            tryCrossDomainAuthentication(filterContext); //this will set the filterContext.Result to a certain url
        }
    }

    #endregion
}

其他观察
当我指定一个让我很难过Order = 2的事情时,它确实有效。AuthorizeAttribute但这不是一个非常易于管理的方法......

4

1 回答 1

0

我一定是按照我想要的方式阅读了 msdn 文章......

Order 属性采用一个整数值,该整数值必须为 0(默认值)或更大,但有一个例外。省略 Order 属性会为过滤器提供 -1 的顺序值,这表示未指定的顺序。范围内其 Order 属性设置为 -1 的任何操作过滤器都将以未确定的顺序执行,但在具有指定 order 的过滤器之前执行。

AuthorizeAttribute因此,阅读本文,除非您编写 custom或 custom ,否则似乎不可能做我想做的事ControllerActionInvoker。真是糟透了!

于 2012-05-11T13:17:13.593 回答