0

カスタムDataAnnotation属性内のプロパティにアクセスする必要があります。応答値を設定するには、この属性にどのようにアクセスできますか?属性がモデルプロパティに追加されます。Web API - 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); 
     } 
    } 
} 

答えて

0

カスタム属性がコントローラに適用されていると仮定すると、OnActionExecutingイベントで次のように試すことができます。このようなことはMVCコントローラでも機能しますが、APIコントローラでも動作するはずです。

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

これはクラス(Model)上にある場合は、タイプが既に分かっているため、かなり先に進むはずです。 Modelクラスを置き換えます。

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

これはモデルプロパティに適用されます。 – PsychoDUCK

+0

答えを変更しました。お役に立てれば! –

関連する問題