我很难让Web API使用XML。看起来它应该适用于XML,但许多初学者教程只将int和string传递给一个非常简单的模型。
我能够从HttpWebRequest中提取XML,但我想尝试将XML绑定到模型。不过,我对如何使用XML进行发布感到困惑。
每次我将XML(任何XML,我只是在尝试)发布到我的ApiController方法时,我为XML创建的模型对象为null。所以,我认为有些东西没有连线。我不确定是否必须在Global.asax.cs文件中添加一个条目,或者我是否需要帮助类或什么。
有人能指出我正确的方向吗? (请不要“只使用JSON”建议。我也想做JSON,但我也想知道如何使XML工作。)
谢谢!
答案 0 :(得分:1)
最简单的方法是对您的对象执行简单的获取,以获取要发送回的XML的示例。
要记住的事情:
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
,这是指示空值xmlns="http://schemas.datacontract.org/2004/07/MvcApplication10.Controllers"
accept: application/xml
content-type: application/xml
使用示例对象和控制器。
public class Foo
{
public string Bar { get; set; }
}
public class FoosController : ApiController
{
// GET api/foos
public Foo Get()
{
return new Foo { Bar = "Test" };
}
// GET api/foos
public Foo Post(Foo test)
{
return test;
}
}
我在/ api / foos上做一个GET并得到一个示例对象:
User-Agent: Fiddler
Host: localhost
accept: application/xml
响应:
<Foo xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MvcApplication10.Controllers"><Bar>Testing</Bar></Foo>
要发回来,我只需将内容类型标题设置为xml中的值并将其发回:
User-Agent: Fiddler
Host: localhost:61280
content-type: application/xml
Content-Length: 167
请求
<Foo xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MvcApplication10.Controllers"><Bar>Testing Response</Bar></Foo
回复
<Foo xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MvcApplication10.Controllers"><Bar>Testing Response</Bar></Foo>
<强>更新强>
对于复杂的XML模型,您需要开始使用DataContract注释http://msdn.microsoft.com/en-us/library/ms731045.aspx。
示例:
[DataContract(Name = "Person")]
public class Foo
{
[DataMember(Name = "Address", IsRequired = False)]
public string Bar { get; set; }
}
这改变了所需的XML
<Person xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MvcApplication10.Controllers"><Address>Testing Response</Address></Person>
对于收藏品等,请查看此处http://msdn.microsoft.com/en-us/library/aa347850.aspx