我在控制器的PUT操作中定义了以下ComplexType,如下所示:
[DataContract(Namespace = "http://schemas.abc.com/formurl", Name = "ComplexData")]
public class ComplexData {
[DataMember] public string Name { get; set; }
[DataMember] public Int32 ID { get; set; }
[DataMember] public DataExchangeList DataExchange { get; set; }
}
[DataContract(Namespace = "http://schemas.abc.com/formurl", Name = "DataItem")]
public class DataItem {
[DataMember] public string Name { get; set; }
[DataMember] public string Value { get; set; }
}
[CollectionDataContract(Namespace = "http://schemas.abc.com/formurl", Name = "DataExchange")]
public class DataExchangeList : List<DataItem> {
}
这是我的控制器:
public class ValuesController : ApiController
{
// PUT api/values
public HttpResponseMessage Put(ComplexData data)
{
return Request.CreateResponse<ComplexData>(HttpStatusCode.OK, data);
}
}
尝试在PUT上传递ComplexData类型时,集合DataExchange无法正确绑定:
PUT http://localhost:53954/api/values HTTP/1.1
User-Agent: Fiddler
Content-Type: application/x-www-form-urlencoded
Accept: application/xml
Host: localhost:53954
Content-Length: 106
Id=123456789&Name=Complex&DataExchange[0][Name]=Data&DataExchange[0][Value]=ComplexType
简单地返回数据的响应显示该集合为空:
<ComplexData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.abc.com/formurl">
<DataExchange />
<ID>123456789</ID>
<Name>Complex</Name>
</ComplexData>
这不应该与FormUrlEncodedMediaTypeFormatter一起使用吗?
我传递Collection数据的方式有什么问题吗?
DataExchange [0] [名称] =数据&安培; DataExchange [0] [值] =的ComplexType
任何建议都将不胜感激。
谢谢,
西特