Web API-访问ActionFilterAttribute OnActionExecuting中的自定义属性属性



我需要访问自定义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);
       }
    }
}

假设自定义属性应用于控制器,您可以在OnActionExecuting事件中尝试以下操作。这个类似的东西适用于MVC控制器,但也应该适用于API控制器。

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

正如OP所提到的,如果这是在一个类(Model)上,那么它应该是非常直接的,因为类型是已知的。替换Model类。

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

相关内容

  • 没有找到相关文章

最新更新