2011-08-12 8 views
3

RESTful WebサービスをASP.NET MVC 3 Webアプリケーションとして開発しようとしています。HTTPリクエストに応じてXMLまたはJSONを返す

(私は、この場合、WCFを使用する必要があることを意味する正しいツールを使用する必要がありますが、WCFには抽象レイヤーがあまりにも多くありすぎて、私の頭の中に収まりません。研究プロジェクトのために、私は自分の仕事をしようとしています。私は以前にそれを試してみました、そして今、私はその大きな約束にもかかわらず、WCFは大きな時間を吸う、という意見だほか。

とにかく、どのようなIやりたいことは簡単です:WebサービスがHTTPリクエストで指定されたタイプ(デフォルトではJSON)に応じて、XMLまたはJSONのいずれかの結果を返すようにします。それ、どうやったら出来るの?

答えて

6

Jsonアクション結果は既に存在します。 MvcContribに返すことができるXMLアクションの結果があります。または、Content(xmlContent、 "text/xml")をアクション結果として使用できます。

受け入れヘッダーを照会して、返すアクション結果を判断できます。アクションメソッドがActionResult型を返す限り、返される型は関係ありません。

つまり、全体的なコンセプトを証明すれば、自分がしようとしているものをより良い方法で構成することができます。

+0

小規模な追加:Content-Typeが応答ヘッダーであるため、Acceptヘッダーが正しいと思われます。 –

+0

Doh、悪いです。それを指摘してくれてありがとう、私は編集を行います。 –

+0

その意味でも興味深い:http://www.gethifi.com/blog/browser-rest-http-accept-headers - まだ、私はRestful APIでありフォーマットのみを使用してAccept Headersを使って行くだろうブラウザがプライマリコンシューマである場合はJasonによって提案されています)。 –

2

簡単な解決策は、コントローラメソッドにオプションのパラメータを作成し、ビューを適切な形式で返すことです。

public ActionResult GetFormattedResults(string format) 
{ 
    var data = GetResults(); 

    ActionResult result = new JsonResult(data); 

    switch(format.ToLower()) 
    { 
    case "xml": 
     result = new XmlResult(data); // this class doesn't exist in MVC3 you will need to roll your own 
    case "html": 
     result = new View(data); 
    } 

    return result; 
} 

あなたは、コントローラのメソッド間で機能を再利用できるように、また、ActionFilterへの書式設定機能をラップすることができます。

+2

"void"メソッドから削除する必要があります – VJAI