0

Web API を XML で動作させるのに非常に苦労しています。XML で動作するはずですが、初心者向けチュートリアルの多くは、int と string を非常に単純なモデルに渡すだけです。

HttpWebRequest から XML を抽出できましたが、XML をモデルにバインドしてみます。ただし、投稿に XML を使用する方法については混乱しています。

XML (任意の XML、実験中) を ApiController メソッドにポストするたびに、XML 用に作成したモデル オブジェクトが null になります。だから、配線されていない何かがあると思います。Global.asax.cs ファイルにエントリを追加する必要があるのか​​、それともヘルパー クラスが必要なのかがわかりません。

誰かが私を正しい方向に向けることができますか? (「JSON だけを使用する」という提案はやめてください。JSON もやりたいのですが、XML を機能させる方法も知りたいです。)

ありがとう!!

4

1 に答える 1

1

最も簡単な方法は、オブジェクトに対して単純な get を実行して、送り返す XML の例を取得することです。

覚えておくべきこと:

  1. xmlns:i="http://www.w3.org/2001/XMLSchema-instance"null 値を示すために必要な名前空間を含めます
  2. 標準の XML シリアライザー構成を使用する場合は、名前空間も必要です。xmlns="http://schemas.datacontract.org/2004/07/MvcApplication10.Controllers"
  3. get set を実行するとき、accept ヘッダーを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 に答える