【问题标题】:Web API - Access Custom Attribute Properties inside ActionFilterAttribute OnActionExecutingWeb API - 访问 ActionFilterAttribute OnActionExecuting 内的自定义属性属性
【发布时间】:2016-05-06 14:51:42
【问题描述】:

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

【问题讨论】:

    标签: validation asp.net-web-api data-annotations custom-attributes onactionexecuting


    【解决方案1】:

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

    【讨论】:

    • 应用于模型属性。
    • 修改了答案。希望这会有所帮助!
    猜你喜欢
    • 1970-01-01
    • 2018-10-24
    • 2017-09-08
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 2019-05-03
    相关资源
    最近更新 更多