从这个问题开始,我试图将一个包含复杂对象集合的复杂对象传递给 ASP.NET Web API 控制器操作方法,但是我无法找到正确的格式以用于我的输入对象要求。继续克里斯托弗约翰逊问题中的示例(并删除一些简单的字段),如果我将他的PhoneRequest
对象更改为包含电话号码的集合......
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
的东西。这是我的调试器 Watch 的复制粘贴:
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/Whatever 作为您的 Content-Type”......如果我能够做到,我会的。