在使用带有 ASP.NET Web API 的 XML 数据进行 POST 时,我无法让模型绑定(bind)工作。 JSON 数据工作正常。
使用全新的 Web API 项目,这是我的模型类:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class PostResponse
{
public string ResponseText { get; set; }
}
这是我在 Controller 中的 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 成功运行它:
Request Headers:
User-Agent: Fiddler
Host: localhost:49188
Content-Type: application/json; charset=utf-8
Content-Length: 38Request Body:
{"FirstName":"Tom","LastName":"Jones"}Result:
{"ResponseText":"The first name is Tom"}
传入 XML 时,Person 对象未正确水合:
Request Headers:
User-Agent: Fiddler
Host: localhost:49188
Content-Type: text/xml
Content-Length: 79Request Body:
<Person>
<FirstName>Tom</FirstName>
<LastName>Jones</LastName>
</Person>Result:
<ResponseText>aPerson is null</ResponseText>
据我了解,XML 应该类似于 JSON。关于我在这里缺少什么的任何建议?
谢谢,
跳过
最佳答案
将此添加到您的 WebApiConfig.cs
:
config.Formatters.XmlFormatter.UseXmlSerializer = true;
这迫使 Web API 使用 XMLSerializer 而不是 DataContractSerializer,并允许您传递原始 XML。
否则,您必须通过完全合格的数据契约(Contract) 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>
关于asp.net-web-api - ASP.NET Web API - 模型绑定(bind)不适用于 POST 上的 XML 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12976352/