0

Ich muss auf eine Eigenschaft in einem benutzerdefinierten DataAnnotation-Attribut zugreifen. Wie kann ich auf dieses Attribut zugreifen, um den Antwortwert festzulegen? Das Attribut wird der Modelleigenschaft hinzugefügt.Web-API - Zugreifen auf benutzerdefinierte Attributeigenschaften in 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); 
     } 
    } 
} 

Antwort

0

Angenommen, das benutzerdefinierte Attribut wird auf den Controller angewendet, können Sie versuchen, dem OnActionExecuting-Ereignis zu folgen. Diese ähnliche Funktion funktioniert mit dem MVC-Controller, sollte aber auch mit dem API-Controller funktionieren.

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

Wie OP erwähnt, wenn dies für eine Klasse (Modell) ist, sollte es ziemlich starightforward sein, weil die Art bereits bekannt ist. Ersetzen Sie die Model-Klasse.

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

Es wird auf die Modelleigenschaft angewendet. – PsychoDUCK

+0

Die Antwort wurde geändert. Hoffe das hilft! –