ASP.NET Web API - 模型绑定不在POST上使用XML数据

时间:2012-10-19 14:26:11

标签: asp.net-web-api

使用ASP.NET Web API使用XML数据进行POST时,我无法使模型绑定工作。 JSON数据工作正常。

使用全新的Web API项目,这是我的模型类:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class PostResponse
{
    public string ResponseText { get; set; }
}

这是我在控制器中的post方法:

    public PostResponse Post([FromBody]Person aPerson)
    {
        var responseObj = new PostResponse();
        if (aPerson == null)
        {
            responseObj.ResponseText = "aPerson is null";
            return responseObj;
        }

        if (aPerson.FirstName == null)
        {
            responseObj.ResponseText = "First Name is null";
            return responseObj;
        }

        responseObj.ResponseText = string.Format("The first name is {0}", aPerson.FirstName);
        return responseObj;
    }

我可以使用Fiddler的JSON成功运行它:

  

请求标题:
  用户代理:Fiddler
  主持人:localhost:49188
  Content-Type:application / json;字符集= UTF-8
  内容长度:38

     

请求正文:
  { “姓”: “汤姆”, “名字”: “琼斯”}

     

结果:
  {“ResponseText”:“名字是汤姆”}

传入XML时,Person对象没有正确补充水分:

  

请求标题:
  用户代理:Fiddler
  主持人:localhost:49188
  内容类型:text / xml
  内容长度:79

     

请求正文:
  <人>
  <姓>汤姆与LT; /姓>
  <名字> Jones和LT; /名字>
  < /人>

     

结果:
  < ResponseText> aPerson为null< / ResponseText>

据我所知,XML应该与JSON类似。关于我在这里缺少什么的任何建议?

谢谢,
跳过

1 个答案:

答案 0 :(得分:25)

WebApiConfig.cs

中添加此内容
config.Formatters.XmlFormatter.UseXmlSerializer = true;

这迫使Web API使用XMLSerializer而不是DataContractSerializer,并允许您传递原始XML。

否则你必须通过完全合格的数据收集XML,即:

<Person xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Test.WebAPI.Controllers">
<FirstName>a</FirstName>
<LastName>b</LastName>
</Person>