Propriétés de l'attribut Autoriser les API Web personnalisées

Je suis en train de s'étendre par défaut de l'Api Web autoriser attribut pour permettre à des utilisateurs authentifiés ont accès à un ensemble d'actions, même si elles ne sont pas enregistrées dans l'application (par exemple, ils n'ont pas un rôle).

 public class AuthorizeVerifiedUsersAttribute : AuthorizeAttribute
    {
        ///<summary>
        ///Gets or sets the authorized roles.
        ///</summary>
        public new string Roles { get { return base.Roles; } set { base.Roles = value; } }

        ///<summary>
        /// Gets or sets the authorized users.
        ///</summary>
        public new string Users { get { return base.Users; } set { base.Users = value; } }

        private bool _bypassValidation;
        ///<summary>
        ///Gets of sets a controller or an action as an authorization exception
        ///</summary>
        public virtual bool BypassValidation
        {
            get
            {
                Debug.WriteLine("get:" + TypeId.GetHashCode() + " " + _bypassValidation);
                return _bypassValidation;
            }
            set
            {
                Debug.WriteLine("set:" + TypeId.GetHashCode() + " " + value);
                _bypassValidation = value;
            }
        }

        protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            if (HttpContext.Current.User.Identity.IsAuthenticated)
            {
                if (BypassValidation)
                {
                    return true;
                }
                else
                {
                   //return false if user is unverified

                }
            }

            return base.IsAuthorized(actionContext);
        }
    }

Et il est utilisé comme ceci:

 [AuthorizeVerifiedUsers]
 public class UserProfileController : ApiController
 {

    [AuthorizeVerifiedUsers(BypassValidation = true)]
    public bool Verify(string verificationCode)
    {}
 }

Jusqu'à présent, cette action est la seule qui est à l'aide de la BypassValidation = true.

La question se pose parce que la BypassValidation propriété est fausse pour l'action, même si la fenêtre de Débogage utilisés dans le BypassValidation bien - affiche les éléments suivants:

ensemble:26833123 Vrai
set:39602703 Vrai
obtenir:43424763 Faux
obtenir:43424763 Faux
obtenir:43424763 Faux //appel qui devrait avoir une "Vrai"...

J'ai remarqué deux choses:

  • Le TypeId (l'identificateur unique de L'attribut) est différente entre les appels qui ont BypassValidation = true et ceux qui ont BypassValidation = false.
  • L'id '43424763' ne dispose pas d'un ensemble correspondant

Des idées?

Merci d'avance,
Joao

source d'informationauteur JCS