虽然我只定义了一个JsonFormatter,但web api如何返回html的内容类型?

时间:2014-01-06 15:09:19

标签: asp.net-web-api asp.net-web-api2

在我的Application_Start中:

var jsonFormatter = new JsonMediaTypeFormatter();
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));

我的默认网址:

[HttpGet]
[Route("~/")]
public HttpResponseMessage Index()
{
    var stream = File.OpenRead(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Views\Home\Index.html"));
    var content = new StreamContent(stream);
    return new HttpResponseMessage() { Content = content };
}

内容属于"text/html"类型,但我没有在response.Headers.ContentType中设置它,但仍然正确返回了html文件,尽管没有像html内容协商员那样的东西,实际上我假设了这个动作将jtml文件作为json返回,否则会发生错误,但一切正常。

为什么?

1 个答案:

答案 0 :(得分:0)

谷歌搜索了一段时间后,我发现了这个解释:

http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.2.1

  

包含实体主体的任何HTTP / 1.1消息应该包含一个   Content-Type标头字段,用于定义该主体的媒体类型。如果和   仅当Content-Type字段未给出媒体类型时,   收件人可以尝试通过检查媒体类型来猜测媒体类型   用于标识的URI的内容和/或名称扩展名   资源。如果媒体类型仍然未知,则收件人应该   将其视为“application / octet-stream”类型。

所以我的“浏览器”正在检查以.HTML结尾的资源的URI,因此将其视为内容类型“text / html”: - )