2012-12-18 69 views
1

我猜測它之前已被問過,但我沒有看到它,並認爲也許我錯過了一些根本。我的問題是爲什麼我無法使用一個基於接受的內容格式(即application/json)的結果格式的API控制器?也許我懶惰 - 但我寧願做類似如果html是預期的結果格式比讓我返回一個視圖,如果json是接受格式比我可以返回JSOn -etc ...如果我有兩個命名空間,那麼也是我必須維護的兩種方法 - 唯一的區別是媒體格式。使用相同的控件返回JSON/XML/HTML與Web API MVC4

回答

0

當您從在Web API控制器動作返回一個對象,什麼是真正回事幕後看起來是這樣的:

public class SessionController : ApiController 
    { 

     public HttpResponseMessage Get(int id) 
     { 
      var vm = new SessionDetailViewModel {Speaker = "Bob", Title = "Bob's talk"}; 

      var conneg = new DefaultContentNegotiator(); 
      var result = conneg.Negotiate(typeof (SessionDetailViewModel), this.Request,Configuration.Formatters); 
      var content = new ObjectContent<SessionDetailViewModel>(vm, result.Formatter,result.MediaType); 

      return new HttpResponseMessage() {Content = content}; 
     } 
    } 

只要你擁有一套合適的格式化,可以映射的返回的對象到wire格式然後conneg會自動發生。

+1

另外:開箱即用支持JSON和XML。沒有內置的HTML格式化程序,但我知道人們寫了一些。 –

+0

我想我也在問 - 爲什麼應該有兩個單獨的控制器?就像它如何根據請求中的接受格式傳遞XML/json一樣 - 對html不能做到這一點? – ecco88

+0

@ ecco88只需一個控制器即可完成。我已經玩了一下這個想法。我在這裏有一個例子,它從同一個控制器返回html,純文本和OData https://github.com/darrelmiller/HypermediaApiSite/blob/master/HypermediaApiSiteConsole/Root/Learning/LearningController.cs –