С ActionFilterAttribute
можно использовать DataAnnotation для параметров действия. Это позволяет вам делать такие вещи:
ActionResult MyAction([Required] string param1, [StringLength(50)] string param2)
{
If(ModeState.IsValid)
{
// Do Something
}
}
Смотрите решение здесь: https://blog.markvincze.com/how-to-validate-action-parameters-with-dataannotation-attributes/
Он использует фильтр действий для прохождения всех параметров действий запроса и выполнения для них аннотаций данных (если они есть).
РЕДАКТИРОВАТЬ: Решение выше работает только в .NET Core. Я сделал слегка измененную версию, которая работает на .NET Framework 4.5 (может работать на более старых версиях)
public class ValidateActionParametersAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext context)
{
var parameters = context.ActionDescriptor.GetParameters();
foreach (var parameter in parameters)
{
var argument = context.ActionArguments[parameter.ParameterName];
EvaluateValidationAttributes(parameter, argument, context.ModelState);
}
base.OnActionExecuting(context);
}
private void EvaluateValidationAttributes(HttpParameterDescriptor parameter, object argument, ModelStateDictionary modelState)
{
var validationAttributes = parameter.GetCustomAttributes<ValidationAttribute>();
foreach (var validationAttribute in validationAttributes)
{
if (validationAttribute != null)
{
var isValid = validationAttribute.IsValid(argument);
if (!isValid)
{
modelState.AddModelError(parameter.ParameterName, validationAttribute.FormatErrorMessage(parameter.ParameterName));
}
}
}
}
}