11

ASP.NET Web APIでXMLデータを使用してPOSTを実行すると、モデルバインディングを機能させることができませんでした。JSONデータは正常に機能します。

まったく新しいWebAPIプロジェクトを使用して、これが私のモデルクラスです。

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
コンテンツタイプ:application / json; charset = utf-8
Content-Length:38

リクエスト本文:
{"FirstName": "Tom"、 "LastName": "Jones"}

結果:
{"ResponseText":"名はトムです"}

XMLで渡す場合、Personオブジェクトは正しくハイドレートされません。

リクエストヘッダー:
ユーザーエージェント:フィドラー
ホスト:localhost:49188
コンテンツタイプ:text / xml
コンテンツ長:79

リクエスト本文:
<Person>
    <FirstName> Tom </ FirstName>
    <LastName> Jones </ LastName>
</ Person>

結果:
<ResponseText>aPersonはnullです</ResponseText>

私が理解していることから、XMLはJSONと同様に機能するはずです。私がここで欠けているものについて何か提案はありますか?

ありがとう、
スキップ

4

1 に答える 1

26

WebApiConfig.csこれをあなたの:に追加してください

config.Formatters.XmlFormatter.UseXmlSerializer = true;

これにより、Web APIはDataContractSerializerの代わりにXMLSerializerを使用するようになり、生の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 に答える