C# 复杂类型参数属性未发生WebApi数据批注验证
我是ASP.NETWebAPI新手。因此,如果以前有人问过这个问题(我不确定正确的术语),我表示歉意,但我只能找到与我的问题略有不同的术语 我需要创建一个接受复杂类型的C# 复杂类型参数属性未发生WebApi数据批注验证,c#,asp.net-web-api,C#,Asp.net Web Api,我是ASP.NETWebAPI新手。因此,如果以前有人问过这个问题(我不确定正确的术语),我表示歉意,但我只能找到与我的问题略有不同的术语 我需要创建一个接受复杂类型的Post控制器(一个TestObject),其中包含: 一个IEnumerable,其中Person具有属性Username和ExternalId 控制器应如何处理数据的选项(一个TestOptions对象) 我使用数据注释定义了以下类,以帮助验证: public class TestObject { public IEn
Post
控制器(一个TestObject
),其中包含:
IEnumerable
,其中Person
具有属性Username
和ExternalId
TestOptions
对象)public class TestObject
{
public IEnumerable<TestPerson> TestPerson;
public TestOptions Options;
public void TestOject()
{
this.TestPerson = new List<TestPerson>();
this.Options = new TestOptions();
}
}
public class TestPerson
{
[Required, MaxLength(50)]
public string ExternalId;
[Required, MaxLength(50)]
public string Username;
}
public class TestOptions
{
[Required]
public bool Option1;
[Required, MaxLength(50)]
public string Option2;
}
如果我使用Fiddler发送一个具有正确结构的JSON对象示例,它就可以正常工作。但是,如果我故意引入这样的错误(例如,Username
和Option2
缺失)的话
{
"TestPerson":[
{ "ExternalId":"123", "Username":"Bob" },
{ "ExternalId":"123" }
],
"Options":{"Option1":false}
}
我还是会
状态200
发现2人
为什么会这样?我可以在复杂类型上使用数据注释验证吗
更新
正在调试设置了属性值的图像:
如果您没有使用TestPerson视图,验证程序将不会执行。 使用
您需要将字段转换为属性,而不是使用字段,这样才能工作:
[Required, MaxLength(50)]
public string ExternalId { get; set; }
[Required, MaxLength(50)]
public string Username { get; set; }
对所有公共字段执行此操作
您是否使用调试器查看对象,并查看是否设置了字段?它们可能是,但有关modelbinding的详细信息,请参见此处:
更新:
我已经试过并测试过了,相信它会解决您的问题。您好,这不是MVC项目,所以我没有任何ViewsHanks。我添加了getter和setter,但仍然没有进行验证。我附上了调试器的图像,显示正在设置的值。也许您可以发现遗漏了什么?是的,您没有将
TestObject
中的字段设置为properties!阿氏;脸掌心时刻。。。谢谢,它在工作。出于兴趣,您知道为什么此验证不适用于字段,而只适用于属性吗。另一个问题说这是故意的,但这有什么原因吗?我不知道为什么。仔细研究了一下,但还是接受了事实!杰出的无论如何,谢谢你。
if(ModelState.IsValid && TryValidateModel(model.TestPerson, "TestPerson."))
{
//Submodel will be validated here.
}
[Required, MaxLength(50)]
public string ExternalId { get; set; }
[Required, MaxLength(50)]
public string Username { get; set; }