在我的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返回,否则会发生错误,但一切正常。
为什么?
答案 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”: - )