1

Web API サービスを作成して、Web サイトが JavaScript を介して外部 XML フィードにアクセスできるようにしようとしています (同一オリジン ポリシーの問題を回避します)。これらのフィードは、以下に示すように生の XML を返します (Fiddler でキャプチャ)。

リクエスト:

GET http://wxdata.weather.com/wxdata/search/search?where=london HTTP/1.1
Host: wxdata.weather.com
Connection: Keep-Alive

応答:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=UTF-8
X-Varnish: 3773154810
X-Cache-Hits: 0
Cache-Control: max-age=55
Date: Wed, 27 Nov 2013 19:52:24 GMT
Content-Length: 504
Connection: keep-alive

<search ver="3.0">
          <loc id="UKXX0085" type="1">London, GLA, United Kingdom</loc><loc id="USAL2905" type="1">London, AL</loc><loc id="USAR0340" type="1">London, AR</loc><loc id="USCA9301" type="1">London, CA</loc><loc id="USIN2109" type="1">London, IN</loc><loc id="USKY1090" type="1">London, KY</loc><loc id="USMI2014" type="1">London, MI</loc><loc id="USMN2182" type="1">London, MN</loc><loc id="USMO2769" type="1">London, MO</loc><loc id="USOH0520" type="1">London, OH</loc>
        </search>

Web API のコンテンツ ネゴシエーション機能を利用したいと考えています。ただし、応答の生の XML フィードが与えられた場合、コントローラーがどの型を返す必要があるのか​​ わかりません。

public class SearchController : ApiController
{
    public string Get(string location)
    {
        HttpClient client = new HttpClient();
        client.BaseAddress = new Uri("http://wxdata.weather.com");
        HttpResponseMessage resp = client.GetAsync(String.Format("wxdata/search/search?where={0}", location)).Result;
        resp.EnsureSuccessStatusCode();

    // Need help here

    }
}

いくつかのバリエーションを試しました (ReadAsStringAsync 経由の文字列、LoadXml 経由の XmlDocument、JsonConvert.SerializeXmlNode 経由の文字列など)。これまで試したアプローチはどれも、Accept: application/xml と Accept: application/json リクエストの両方で機能しません。一方の受け入れタイプは機能しますが、もう一方は例外または要求どおりにフォーマットされていない結果を生成します。

私は Web API が初めてです。私が見たものはすべて、データを適切な CLR 型に変換することを示唆しているように見えます。その後、コンテンツ ネゴシエーションが残りを処理する必要があります。この未加工の XML フィードを処理する方法がわかりません。要求に応じて、コントローラーが適切な JSON または適切な XML (元のフィードからの生の XML を本質的に通過する) を返すようにします。

助言がありますか?

4

1 に答える 1