0

問題デフォルトのMVCAuthorizeAttributeの前に実行される
カスタムを作成します。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 = 2AuthorizeAttribute

4

1 に答える 1

0

私はmsdnの記事を私が望んでいた方法で読んだに違いありません...

Orderプロパティは、1つの例外を除いて、0(デフォルト)以上でなければならない整数値を取ります。Orderプロパティを省略すると、フィルターに-1の順序値が与えられます。これは、指定されていない順序を示します。Orderプロパティが-1に設定されているスコープ内のアクションフィルターは、未定の順序で実行されますが、指定された順序を持つフィルターのに実行されます。

AuthorizeAttributeですから、これを読んで、カスタムやカスタムを書かない限り、私がやりたいことをするのは不可能のようですControllerActionInvoker。それは本当にひどいです!

于 2012-05-11T13:17:13.593 に答える