Asp.net web api Web API FormURLEncoded媒体类型格式化程序不适用于复杂类型
我在控制器的PUT操作中定义了以下ComplexType,如下所示:Asp.net web api Web API FormURLEncoded媒体类型格式化程序不适用于复杂类型,asp.net-web-api,model-binding,mediatypeformatter,Asp.net Web Api,Model Binding,Mediatypeformatter,我在控制器的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;
[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> {
}
仅返回数据的响应显示集合为空:
<ComplexData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.abc.com/formurl">
<DataExchange />
<ID>123456789</ID>
<Name>Complex</Name>
</ComplexData>
123456789
复杂的
这不应该与FormUrlEncodedMediaTypeFormatter一起使用吗
我传递收集数据的方式是否有任何问题,如下所示
数据交换[0][Name]=数据和数据交换[0][Value]=ComplexType
如有任何建议,将不胜感激
谢谢
Sid这有什么问题?您得到的回答是正确的??可能是Jon的重复,定制模型绑定解决方案看起来很棒。但是,如果我理解正确的话,它会强制传递给控制器的所有数据采用查询字符串格式。我的客户端仍然需要在Web API中支持JSON和XML媒体类型格式化程序。这个问题只是为了解决内容类型为application/x-www-form-urlencoded时的绑定问题。我想我要看的是定制默认的FormUrlEncodedMediaTypeFormatter来支持复杂的集合模型?我也有类似的问题
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>