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

时间:2016-05-06 14:51:42

标签: validation asp.net-web-api data-annotations custom-attributes 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);
       }
    }
}

1 个答案:

答案 0 :(得分:0)

假设自定义属性应用于控制器,您可以尝试在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;