在MVC AuthorizeAttribute之前执行自定义属性中的代码

时间:2012-05-11 12:32:15

标签: asp.net-mvc authentication action-filter

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

我尝试过的事情

  • 我创建了一个继承自IAuthorizationFilter的自定义属性。
  • 我已将此属性注册为globalfilter,如下所示:
    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给我带来困难的时候,它确实有效。但这不是一个非常易于管理的方式......

1 个答案:

答案 0 :(得分:0)

我必须按照我想要的方式阅读msdn文章......

  

Order属性采用一个必须为0的整数值(默认值)   或更高,但有一个例外。省略Order属性给出了   过滤订单值-1,表示未指定的订单。任何   Order属性设置为-1的作用域中的动作过滤器将以未确定的顺序执行,但是之前具有   指定的订单

因此,阅读本文,除非您编写自定义AuthorizeAttribute或自定义ControllerActionInvoker,否则似乎无法按照我的意愿行事。真的太糟糕了!