Web API FormURLEncoded媒体类型格式化程序不适用于复杂类型

时间:2014-02-27 19:08:44

标签: 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; 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

任何建议都将不胜感激。

谢谢,

西特

0 个答案:

没有答案