随着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的核心。我做了一个稍微修改版本,在.NET框架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));
}
}
}
}
}
而且让简单的解决方案与视图模型...我相信,没有必要寻找其他的。 – LukLed 2010-04-26 22:11:27