我需要在 Controller 操作中获取参数并验证此参数。例如:
public TestController
{
public ActionResult TestMethod(int testParamFromUri)
{
//here is my validation
if(testParamFromUri < 0)
{
throw new TestException();
}
if(testParamFromUri > 50)
{
testParamFromUri = 50;
}
//other code
}
}
我的问题:
是否可以像上面的方法一样创建可以进行验证的属性?
然后使用这个属性:
public ActionResult TestMethod([TestVerification]int testParamFromUri)
最佳答案
我认为您无法获得基于 this answer 描述的所需行为;因为没有好的方法来访问验证值。
您可以做的是使用自定义 ModelValidator这将为给定模型执行您想要的任何自定义验证。
我找不到好的教程,但您可以了解下面的基本设置。
Controller 代码
public TestController
{
public ActionResult TestMethod(ModelName model)
{
//This will be false if your ModelState validator fails.
if(ModelState.IsValid)
{
....
}
}
}
模型代码
public class ModelName
{
public int testParamFromUri { get; set; }
}
模型验证器代码
public class ModelNameValidator : IModelValidator<ModelName>
{
public ModelNameValidator()
{
}
public IEnumerable<ModelValidationResult> Validate(ModelName model)
{
//here now my verification
if(model.testParamFromUri < 0)
{
yield return new ModelValidationResult()
{
MemberName = "testParamFromUri",
Message = "Model Error Message Here"
};
}
}
}
现在,所有这些设置完成后,您需要注册模型验证器,以便在使用 ViewModel 时执行。这是在 Global.asax 文件中完成的。
Global.asax
ModelValidatorProviders.Providers.Add(new ModelNameValidator());
此外,根据验证的复杂程度,您可以只在新创建的模型上使用 DataAnnotation
,而不必使用 ModelValidator
。
public class ModelName
{
[Range(0, int.MaxValue, ErrorMessage="Error Message")]
public int testParamFromUri { get; set; }
}
关于c# - 创建用于验证的属性并更改参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35461190/