0

カスタム DataAnnotation 属性内のプロパティにアクセスする必要があります。応答値を設定するためにこの属性にアクセスするにはどうすればよいですか? 属性がモデル プロパティに追加されます。

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);
       }
    }
}
4

1 に答える 1

0

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

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

OPで述べたように、これがクラス(モデル)上にある場合、タイプはすでにわかっているため、かなり簡単です。Model クラスを置き換えます。

var att = <<ModalClass>>.GetCustomAttributes(typeof(BirthDateAttribute), false)[0] as BirthDateAttribute;
                    string errorCode = att.ErrorCode;
于 2016-05-06T18:53:58.247 に答える