gpt4 book ai didi

c# - 创建用于验证的属性并更改参数值

转载 作者:行者123 更新时间:2023-11-30 17:39:28 24 4
gpt4 key购买 nike

我需要在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com