0

J'ai besoin d'accéder à une propriété dans un attribut DataAnnotation personnalisé. Comment puis-je accéder à cet attribut pour définir la valeur de réponse? L'attribut est ajouté à la propriété de modèle.API Web - Accès aux propriétés d'attributs personnalisés dans ActionFilterAttribute OnActionExecuting

public class BirthDateAttribute : ValidationAttribute 
{ 
    public string ErrorCode { get; set; } 
    .... 
} 

public class ValidateModelAttribute : ActionFilterAttribute 
{     
    public override void OnActionExecuting(HttpActionContext actionContext) 
    { 
     if (!actionContext.ModelState.IsValid) 
     { 
      List<Errors> errors = new List<Errors>(); 

      // Set error message and errorCode 
      foreach (var key in keys) 
      { 
       if (!actionContext.ModelState.IsValidField(key)) 
       { 
        error.Add(new HttpResponseError 
        { 
         Code = ???????????, 
         Message = actionContext.ModelState[key].Errors.FirstOrDefault().ErrorMessage 
        }); 
       } 
      }     

      // Return to client 
      actionContext.Response = actionContext.Request.CreateResponse(
       HttpStatusCode.BadRequest, errors); 
     } 
    } 
} 

Répondre

0

En supposant que l'attribut personnalisé est appliqué au contrôleur, vous pouvez essayer de suivre l'événement OnActionExecuting. Cette chose similaire fonctionne avec le contrôleur MVC, mais devrait fonctionner avec le contrôleur API aussi.

var att = actionContext.ControllerContext.GetType().GetCustomAttributes(typeof(BirthDateAttribute), false)[0] as BirthDateAttribute; 
       string errorCode = att.ErrorCode; 

Comme mentionné par OP, si cela est sur une classe (modèle), il devrait être assez starightforward parce que le type est déjà connu. Remplacez la classe Model.

var att = <<ModalClass>>.GetCustomAttributes(typeof(BirthDateAttribute), false)[0] as BirthDateAttribute; 
        string errorCode = att.ErrorCode; 
+0

Il est appliqué à la propriété du modèle. – PsychoDUCK

+0

Modifié la réponse. J'espère que cela t'aides! –