2014-06-19 78 views
1

我真的很困惑的最適當的方式回到我的RESTful API,我使用的Web API 2.設置內容類型的Web API 2響應

起初,我做我的行動回報構建響應IHttpActionResult和方法,我會用return Ok()return NotFound()

後來我發現沒有Forbidden()所以我想我必須做的事情是錯誤的。所以現在我讓我的行動返回HttpResponseMessage。在我的代碼,我回來做下面的響應:

HttpResponseMessage response = Request.CreateResponse(); 
response.StatusCode = HttpStatusCode.OK; 
response.Content = new StringContent(JsonConvert.SerializeObject(responseData)); 
return response; 

的問題是,這種反應現在被用在Content-Type派「text/plain的」 - 它需要與內容 - 發送「application/json」的類型。我無法找到我應該如何改變響應的內容類型,但即使我可以在每個請求中都做到這一點似乎很麻煩。是一種更好的方式,我在這裏忽略了某種最佳做法?

回答

0

修改收集你在你的Global.asax設置JsonFormatter爲每個請求的內容協商?例如:

GlobalConfiguration.Configuration.EnsureInitialized(); 
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver(); 

這是我發現的另一個問題是與你的控制器參數簽名您的路由前綴/路由不能匹配你給平時404碼傳球的URL。

2

除了手動填充它,你可以做到這一點

var response = Request.CreateResponse(HttpStatusCode.OK, responseData); 
return response; 

這,這將返回的內容類型爲JSON。

+0

我寫了我自己的答案,然後意識到它幾乎與你的一樣... Request.CreateResponse確實將它從文本/純文本更改爲application/json(或者更確切地說,它使用媒體格式化程序)。我會添加這個鏈接,我找到了答案:[在Web API 2中的操作結果](http://www.asp.net/web-api/overview/web-api-routing-and-actions/action-results) – thinkOfaNumber

相關問題