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;
}
私はまだプロトタイプの段階にあるので、少しハックします。私はその実行可能性を証明できるときにリファクタリングします。
シリアライズ可能なオブジェクトを返す場合、WebAPIはクライアントが送信するAcceptヘッダーに基づいてJSONまたはXMLを自動的に送信します。
文字列を返す場合、文字列を取得します。
コントローラーに戻りオブジェクトのタイプを決定させたくない場合は、メソッドの戻りタイプを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を返す最も簡単な方法です。
IHttpActionResult戻り値型と互換性がある別の方法を次に示します。この場合、データコントラクトシリアライザーの代わりにXMLシリアライザー(オプション)を使用するように求めています。return ResponseMessage(
IHttpActionResultと互換性のある戻り値を取得します。
return ResponseMessage(new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ObjectContent<SomeType>(objectToSerialize,
new System.Net.Http.Formatting.XmlMediaTypeFormatter {
UseXmlSerializer = true
})
});
オブジェクトを返すだけで、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を送信する代わりに、クライアントがコンテンツタイプを要求できるようにします。