如果我们暂时不谈论 IHttpActionResult
,Web API中的内容协商过程是通过格式化器驱动的。因此,您需要创建一个新的格式化器来处理媒体类型text/html
。
Web API公开了其用于内容协商的默认算法,称为DefaultContentNegotiator
,它是服务IContentNegotiator
的实现。
现在,这个协商算法可以由Web API自动运行,例如在以下情况下:
使用方法1:
public MyObject Get(int id)
{
return new MyObject();
}
或者
您可以像以下这样手动运行谈判:
用法 #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
媒体类型,则需要编写自定义格式化程序并将其添加到Web API的格式化程序集合中,然后当您使用Ok<string>("Hello")
并带有text/html
的接受标头时,您应该看到响应以text/html
的形式呈现。希望这可以帮助到您。