56

WEB API メソッドが XML オブジェクトを呼び出し元のアプリケーションに返すようにしたいと考えています。現在、XML を文字列オブジェクトとして返すだけです。これはノーノーですか?その場合、webapi の get メソッドに、XML 型のオブジェクトを返すことをどのように伝えますか?

ありがとう

編集: Get メソッドの例:

[AcceptVerbs("GET")]
public HttpResponseMessage Get(int tenantID, string dataType, string ActionName)
{
   List<string> SQLResult = MyWebSite_DataProvidor.DB.spReturnXMLData
            ("SELECT * FROM vwContactListing FOR XML AUTO, ELEMENTS").ToList();
   string AllResults = "";
   for (int i = 0; i < SQLResult.Count - 1; i++)
   {
       AllResults += SQLResult[i];
   }
    string sSyncData = "<?xml version=\"1.0\"?> " + AllResults;
    HttpResponseMessage response = new HttpResponseMessage();
    response.Content = new StringContent(sSyncData);
    return response;          
}

私はまだプロトタイプの段階にあるので、ちょっとハックです。実行可能であることを証明できたらリファクタリングします。

4

5 に答える 5

112

コントローラーに戻りオブジェクトの型を決定させたくない場合は、メソッドの戻り型を as に設定System.Net.Http.HttpResponseMessageし、以下のコードを使用して XML を返す必要があります。

public HttpResponseMessage Authenticate()
{
  //process the request 
  .........

  string XML="<note><body>Message content</body></note>";
  return new HttpResponseMessage() 
  { 
    Content = new StringContent(XML, Encoding.UTF8, "application/xml") 
  };
}

これは、常に Web API から XML を返す最も簡単な方法です。

于 2014-04-14T09:00:15.360 に答える
49

シリアライズ可能なオブジェクトを返す場合、WebAPI は、クライアントが送信する Accept ヘッダーに基づいて JSON または XML を自動的に送信します。

文字列を返す場合は、文字列を取得します。

于 2012-07-26T04:06:35.050 に答える
29

IHttpActionResult 戻り値の型と互換性を持たせる別の方法を次に示します。この場合、データ コントラクト シリアライザーの代わりに XML シリアライザー (オプション) を使用するように求めていますreturn ResponseMessage(。IHttpActionResult と互換性のあるリターンを取得するために使用しています。

return ResponseMessage(new HttpResponseMessage(HttpStatusCode.OK)
       {
           Content = new ObjectContent<SomeType>(objectToSerialize, 
              new System.Net.Http.Formatting.XmlMediaTypeFormatter { 
                  UseXmlSerializer = true 
              })
       });
于 2014-04-22T15:08:38.803 に答える
21

オブジェクトを返すだけで、XML か JSON かを気にする必要はありません。Web API から JSON または XML を要求するのは、クライアントの責任です。たとえば、Internet Explorer を使用して呼び出しを行う場合、要求される既定の形式は Json になり、Web API は Json を返します。ただし、Google Chrome からリクエストを行う場合、デフォルトのリクエスト形式は XML であり、XML が返されます。

Fiddlerを使用して要求を行う場合、Accept ヘッダーを Json または XML のいずれかに指定できます。

Accept: application/xml

この記事をご覧になることをお勧めします: ASP.NET MVC4 Web API ベータ版のコンテンツ ネゴシエーション – パート 1

編集:コードを使用して編集した質問に基づいて:

XML に変換する代わりに、文字列の単純なリストを返します。Fiddler を使って試してみてください。

public List<string> Get(int tenantID, string dataType, string ActionName)
    {
       List<string> SQLResult = MyWebSite_DataProvidor.DB.spReturnXMLData("SELECT * FROM vwContactListing FOR XML AUTO, ELEMENTS").ToList();
       return SQLResult;
     }

たとえば、リストが次のような場合:

List<string> list = new List<string>();
list.Add("Test1");
list.Add("Test2");
list.Add("Test3");
return list;

Accept: application/xml出力を次のように指定します。

<ArrayOfstring xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
  <string>Test1</string>
  <string>Test2</string>
  <string>Test3</string>
</ArrayOfstring>

リクエストで「Accept: application/json」を指定すると、出力は次のようになります。

[
  "Test1",
  "Test2",
  "Test3"
]

そのため、カスタマイズした xml を送信する代わりに、クライアントにコンテンツ タイプを要求させます。

于 2012-07-26T03:43:07.500 に答える