2011-08-12 146 views
3

我正在嘗試開發一個RESTful Web服務作爲ASP.NET MVC 3 Web應用程序。 (我知道,我應該使用正確的工具來完成這個工作,在這種情況下,這意味着我應該使用WCF,但是WCF具有太多的抽象層,因此太大而不適合在我的腦海中,這很酷對於一個研究項目,但我想盡我的工作除了我以前試過,現在我認爲,儘管它的大的承諾,WCF很大的時間。希望做的事很簡單:我希望我的Web服務根據HTTP請求中指定的類型(按默認值,JSON)返回其結果作爲XML或JSON。我怎麼做?根據HTTP請求返回XML或JSON

回答

6

Json操作結果已存在。 MvcContrib具有您可以返回的XML操作結果,或者您可以使用Content(xmlContent,「text/xml」)作爲您的操作結果。

您可以查詢accept頭以確定您想要返回哪個操作結果。只要您的操作方法返回類型ActionResult,它返回的是哪種類型並不重要。

這就是說,一旦你證明了整體概念,有更好的方法來構建你想要做的事情。

+0

小增加:Accept Header似乎是正確的,因爲Content-Type是一個響應頭。 –

+0

Doh,我的壞。感謝您指出,我會進行編輯。 –

+0

在這個意義上也有趣:http://www.gethifi.com/blog/browser-rest-http-accept-headers - 仍然,我會去接受頭部的任何是一個Restful API,只使用格式(作爲由Jason提出)在瀏覽器是主要消費者的情況下。 –

2

一個快速解決方案是在你的Controller方法上創建一個可選參數,並以適當的格式返回視圖。

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