47

現在、システム間の統合に取り組んでおり、そのために WebApi を使用することにしましたが、問題が発生しています...

モデルがあるとしましょう:

public class TestModel
{
    public string Output { get; set; }
}

POST メソッドは次のとおりです。

public string Post(TestModel model)
{
    return model.Output;
}

ヘッダーを使用して Fiddler からリクエストを作成します。

User-Agent: Fiddler
Content-Type: "application/xml"
Accept: "application/xml"
Host: localhost:8616
Content-Length: 57

と本体:

<TestModel><Output>Sito</Output></TestModel>

メソッドのmodelパラメーターPostは常にnullであり、その理由はわかりません。誰も手がかりを持っていますか?

4

5 に答える 5

74

2つのこと:

  1. コンテンツ タイプを引用符で囲む必要はなく ""、Fiddler でヘッダー値を受け入れます。

    User-Agent: Fiddler
    Content-Type: application/xml
    Accept: application/xml
    
  2. Web API は、DataContractSerializerxml シリアル化に既定で を使用します。したがって、型の名前空間を xml に含める必要があります。

    <TestModel 
    xmlns="http://schemas.datacontract.org/2004/07/YourMvcApp.YourNameSpace"> 
        <Output>Sito</Output>
    </TestModel> 
    

    または、で使用するように Web API を構成できXmlSerializerますWebApiConfig.Register

    config.Formatters.XmlFormatter.UseXmlSerializer = true;
    

    次に、XML データに名前空間は必要ありません。

     <TestModel><Output>Sito</Output></TestModel>
    
于 2012-12-28T12:48:49.290 に答える
3

Content-Typeヘッダーを にセットアップし、 のメソッドにapplication/xml設定したことを確認したら、XML ドキュメントの先頭でバージョン管理やエンコードを行う必要がないことが重要です。config.Formatters.XmlFormatter.UseXmlSerializer = true;RegisterWebApiConfig.cs

この最後の部分は私を行き詰まらせていました。これが誰かを助けて時間を節約できることを願っています。

于 2017-01-03T17:34:05.303 に答える
0

私にとっては、構成に複数の xmlFormatter が追加されていました。

デバッグ中に、フォーマッタのリストが重複していることを発見しました。

config.Formatters.Add(new XmlMediaTypeFormatter());

その行を削除すると、機能しました。

その行を確認するファイル

  • Global.acax.cs
  • WebApiConfig.cs
于 2020-11-10T11:30:12.313 に答える