如果我们保持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