gpt4 book ai didi

c# - 如何确定哪个 ValidationAttribute 返回了 ModelError

转载 作者:太空狗 更新时间:2023-10-29 22:00:31 27 4
gpt4 key购买 nike

我在尝试确定哪个 ValidationAttribute 返回了特定的 ModelError 时遇到了问题。我的网络 API 中有一个端点,它采用以下模型;

public class MyClass
{
[Required]
[Range(0, 3)]
public int? Number { get; set; }

[Required]
[Range(0, 3)]
public int? NumberTwo { get; set; }
}

和一个过滤器来检查 ModelState 是否有效;

public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
IEnumerable<ModelError> errors = actionContext.ModelState.Values.SelectMany(s => s.Errors);
// ...
}
}
}

我看到 ModelError 有两个属性; ErrorMessage 是string 类型,Exception 是Exception 类型。我想要一种强类型的方法来确定哪个 ValidationAttribute [Required] 或 [Range(0, 3)] 返回错误响应而不进行字符串操作。有没有办法使用我不熟悉的这些属性返回自定义属性?

如果客户要发布一个模型,例如

{
"NumberTwo":10
}

最终目标是从 API 产生如下响应;

{
"supportCode" : "1234567890",
"errors" : [{
"code" : "Missing",
"message" : "The Number field is required."
}, {
"code" : "Invalid",
"message" : "The field NumberTwo must be between 0 and 3."
}]
}

最佳答案

如果您编写自己的验证例程而不是使用 MVC 中内置的验证例程,这是可能的。您需要对每个属性使用反射,然后对每个属性的每个验证属性使用反射。

关于c# - 如何确定哪个 ValidationAttribute 返回了 ModelError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32526578/

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