當您從在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會自動發生。
另外:開箱即用支持JSON和XML。沒有內置的HTML格式化程序,但我知道人們寫了一些。 –
我想我也在問 - 爲什麼應該有兩個單獨的控制器?就像它如何根據請求中的接受格式傳遞XML/json一樣 - 對html不能做到這一點? – ecco88
@ ecco88只需一個控制器即可完成。我已經玩了一下這個想法。我在這裏有一個例子,它從同一個控制器返回html,純文本和OData https://github.com/darrelmiller/HypermediaApiSite/blob/master/HypermediaApiSiteConsole/Root/Learning/LearningController.cs –