从this question扩展开来,我试图将包含复杂对象集合的复杂对象传递给ASP.NET Web API控制器操作方法,但我正在查找请求中输入对象的正确格式时遇到问题。继续从克里斯托弗·约翰逊的问题的例子(和消除对simplicty某些字段),如果我改变他PhoneRequest
对象包含电话号码的集合...将包含复杂类型数组的复杂类型传递给Web API
public class PhoneRequest
{
public string[] PhoneNumbers { get; set; }
public string State { get; set; }
}
...我要么传递参数作为URL编码的查询字符串:
/api/phonenumber?id[0][State]=UT&id[0][PhoneNumbers][0]=555-1234567
...或POST
它作为编码的HTML表格(Content-Type: application/x-www-form-urlencoded
)请求体:
[0][State]=UT&[0][PhoneNumbers][0]=555-1234567
...然后一切都很好。但是,如果我改变PhoneNumbers
从字符串到一个新的PhoneNumber
类型的集合的集合......
public class PhoneRequest
{
public PhoneNumber[] PhoneNumbers { get; set; }
public string State { get; set; }
}
public class PhoneNumber
{
string AreaCode { get; set; }
string Number { get; set; }
}
...和我通过什么,在我看来是合乎逻辑的方式对象,考虑到以前的结果......
id[0][State]=UT&id[0][PhoneNumbers][0][AreaCode]=555&id[0][PhoneNumbers][0][Number]=1234567
...或再次作为一个HTML表单提交的身体......
[0][State]=UT&[0][PhoneNumbers][0][AreaCode]=555&[0][PhoneNumbers][0][Number]=1234567
...那么它仍然使绑定它一个尝试,并进入我的行动方法,但是该模型只包含状态,并且电话号码是这个奇怪的ComplexUriAndFormObject
的事情。这是从我的调试器复制粘贴观看:
phoneRequest {ComplexUriAndFormObject.Models.PhoneRequest[1]}
[0] {ComplexUriAndFormObject.Models.PhoneRequest}
PhoneNumbers {ComplexUriAndFormObject.Models.PhoneNumber[1]}
[0] {ComplexUriAndFormObject.Models.PhoneNumber}
AreaCode null
Number null
State "UT"
是否有某种方法可以使用此格式正确指定此对象?还是我超越了模型绑定器中内置的ASP.NET Web API能够执行的限制?
注意:请不要说“只是使用POST”或“只是使用JSON/XML /无论作为您的内容类型”......如果我能做到这一点,我会的。
这正好解决了我的问题!谢谢,欢迎来到:) –