Asp.net web api 虽然我只定义了JsonFormatter,但WEPAPI如何返回html的内容类型?

Asp.net web api 虽然我只定义了JsonFormatter,但WEPAPI如何返回html的内容类型?,asp.net-web-api,asp.net-web-api2,Asp.net Web Api,Asp.net Web Api2,在我的应用程序启动中: var jsonFormatter = new JsonMediaTypeFormatter(); config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter)); 我的默认url: [HttpGet] [Route("~/")] public HttpResponseMessage Index() { var stream = File.

在我的应用程序启动中:

var jsonFormatter = new JsonMediaTypeFormatter();
config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
我的默认url:

[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内容协商者的东西,实际上我假设该操作会将html文件作为json返回,或者会发生错误,但一切正常


这是为什么?

在谷歌搜索了一段时间后,我发现了以下解释:

任何包含实体正文的HTTP/1.1消息都应该包含 内容类型标题字段定义该正文的媒体类型。如果和 仅当“内容类型”字段未给出媒体类型时 接收者可以通过检查介质类型来猜测介质类型 用于标识用户的URI的内容和/或名称扩展名 资源。如果媒体类型仍然未知,则收件人应 将其视为类型“应用程序/八位字节流”


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

对,基于以上代码,我希望响应内容类型为
application/octet stream
。是否确实看到响应
content-type
标题为
text/html
?响应。标题集合为空,没有显式设置内容类型。这就是为什么我要问文件如何以HTML而不是json/json字符串的形式返回???神奇的事情发生在哪里?让我们澄清一些事情……您是否看到响应主体包含html文件内容,并且
内容类型
头包含
应用程序/octet流
?@KiranChalla否,fiddler的内容类型是:content-type:text/html,fiddler原始视图中的非压缩html实际上是我创建的html标记。谁在确定内容类型?根据您上面的代码,Web API实际上不运行内容协商..也就是说,如果Web API看到某个操作的返回类型是
HttpResponseMessage
,则不会进行内容协商。因此,我有点困惑您如何看到
text/html
内容类型标题…只是检查一下,你在分享你有的代码吗?有时候为了简单起见,我在帖子中看到用户分享不同的代码。。