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);
}
}
}
1 ответ
Предполагая, что пользовательский атрибут применяется к контроллеру, вы можете попробовать выполнить следующее в событии 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;