如果我們保持IHttpActionResult
討論往旁邊一momment,在網頁API內容協商過程是通過格式化驅動。所以,你需要創建一個新的格式化處理的介質類型text/html
。
Web API公開了它用於內容協商的默認算法DefaultContentNegotiator
,該算法是服務IContentNegotiator
的實現。
使用#1:
public MyObject Get(int id)
{
return new MyObject();
}
OR
您可以手動運行
現在這個協商算法既可以通過網絡API自動爲您在下列情況下,像運行協商喜歡自己在以下情況:
用法#2:
public HttpResponseMessage Get()
{
HttpResponseMessage response = new HttpResponseMessage();
IContentNegotiator defaultNegotiator = this.Configuration.Services.GetContentNegotiator();
ContentNegotiationResult negotationResult = defaultNegotiator.Negotiate(typeof(string), this.Request, this.Configuration.Formatters);
response.Content = new ObjectContent<string>("Hello", negotationResult.Formatter, negotationResult.MediaType);
return response;
}
關於IHttpActionResults:
在以下方案中,Ok<>
是用於產生 OkNegotiatedContentResult<>
類型的實例的快捷方法。
public IHttpActionResult Get()
{
return Ok<string>("Hello");
}
事情是這樣OkNegotiatedContentResult<>
類型做類似的事情在使用上述第2場景。即他們在內部經營談判者。
因此得出結論,如果你打算支持text/html
媒體類型,那麼你需要編寫自定義格式,並把它添加到網頁API的格式集合,然後當你使用Ok<string>("Hello")
與text/html
的接受頭,你應該看到響應在text/html
。希望這可以幫助。
問問自己會有什麼** **你希望得到從這個動作的HTML響應?跨度,divs,標籤,表格?使用json和xml時,由於它們的性質,它或多或少是可預測的,很難爲HTML提供一些通用的東西。您應該手動生成它,並將其與正確的響應標題一起返回。 – Ramunas
我會用RazorEngine渲染對象的看法,我不是在尋找一個防彈「通用」的解決方案。所以它會爲每個返回類型手動生成。 – cvbarros
WebAPI with Razor?看起來像一個正常的ASP.NET MVC – Ramunas