0

我很难让 Web API 与 XML 一起工作。似乎它应该适用于 XML,但许多初学者教程只将整数和字符串传递给一个非常简单的模型。

我能够从 HttpWebRequest 中提取 XML,但我想尝试将 XML 绑定到模型。不过,我对如何使用 XML 进行发布感到困惑。

每次我将 XML(任何 XML,我只是在试验)发布到我的 ApiController 方法时,我为 XML 创建的模型对象都是空的。所以,我假设有些东西没有连接起来。我不确定是否必须在 Global.asax.cs 文件中添加一个条目,或者我是否需要一个帮助类或什么。

有人可以指出我正确的方向吗?(请不要“只使用 JSON”的建议。我也想做 JSON,但我也想知道如何让 XML 正常工作。)

谢谢!!

4

1 回答 1

1

最简单的方法是对您的对象执行简单的获取,以获取要发回的 XML 示例。

要记住的事情:

  1. 包括xmlns:i="http://www.w3.org/2001/XMLSchema-instance"指示空值所需的命名空间
  2. 如果使用标准 XML 序列化器配置,您也需要命名空间,例如xmlns="http://schemas.datacontract.org/2004/07/MvcApplication10.Controllers"
  3. 执行 get 时将接受标头设置为accept: application/xml
  4. 发布到控制器时设置内容类型。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

于 2012-11-28T13:33:39.863 回答