C# 如何使用模型验证确定Asp.Net标识上的验证错误类型

C# 如何使用模型验证确定Asp.Net标识上的验证错误类型,c#,asp.net,validation,asp.net-web-api2,C#,Asp.net,Validation,Asp.net Web Api2,我正在使用Asp.NETIdentity2.0、WebAPI2和.NETFramework4.5 我已经为Web Api实现了一个验证过滤器,它捕获了所有的模型验证错误 Asp.net Identity为每个模型验证错误提供文本错误,但它不提供了解验证错误类型的方法。例如,我不需要文本错误“the phone parameter is required”,但我需要知道该错误是“required”验证错误或我在属性顶部添加的任何属性 例如: Class MyModel { [Required

我正在使用Asp.NETIdentity2.0、WebAPI2和.NETFramework4.5

我已经为Web Api实现了一个验证过滤器,它捕获了所有的模型验证错误

Asp.net Identity为每个模型验证错误提供文本错误,但它不提供了解验证错误类型的方法。例如,我不需要文本错误“the phone parameter is required”,但我需要知道该错误是“required”验证错误或我在属性顶部添加的任何属性

例如:

Class MyModel
{

  [Required]
  [StringLength(10, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
  public string Phone {get; set;};

}

在不读取文本错误的情况下,如何知道
ModelState
是否包含
requiredrorr
stringlengh
错误?

您可以直接从属性读取它:

using System.Reflection;
var modelStateProperties = typeof(MyModel).GetProperties().Where(p => ModelState.Keys.Any(k => k == p.Name));
foreach (var property in modelStateProperties)
{
    // Found properties with errors in them
    var attrs = properties.GetCustomAttributes();
    // attrs now has the list of attributes, i.e., Required, StringLength, etc.
}

ModelState没有您所需要的,模型有。因此,您必须在
MyModel
中查找有错误的属性,并循环遍历每个属性属性。

谢谢。我认为这不能解决我的问题。我不需要知道属性的属性,我需要知道的是与ModelState验证错误相关的属性。我的意思是,当您在ModelState.Value.Errors中进行迭代时,您会得到一个带有键和值的项。我需要知道传递给api的数据是否有效,但也需要知道它是什么类型的错误。。。它是必需的还是stringlength或其他。你知道怎么做吗?