11

在使用带有 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 成功运行它:

请求标头:
用户代理:提琴手
主机:localhost:49188
内容类型:应用程序/json;charset=utf-8
内容长度:38

请求正文:
{"FirstName":"Tom","LastName":"Jones"}

结果:
{"ResponseText":"名字是汤姆"}

传入 XML 时,Person 对象未正确水合:

请求标头:
用户代理:提琴手
主机:localhost:49188
内容类型:文本/xml
内容长度:79

请求正文:
<Person>
    <FirstName>Tom</FirstName>
    <LastName>Jones</LastName>
</Person>

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

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

谢谢,
跳过

4

1 回答 1

26

将此添加到您的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> 
于 2012-10-19T14:39:05.837 回答