Web APi 无效,IIS Express 内容类型,IIS 无内容类型
本文关键字:类型 IIS APi 无效 Web Express | 更新日期: 2023-09-27 18:34:45
好的,所以我有一个带有放置操作和返回类型void的Web api控制器。当我使用 VS 的内置 iisepxress 运行它并调用它时,我按预期返回 204。以下是标题:
Cache-Control no-cache
Connection close
Content-Type text/html
Date Thu, 10 Oct 2013 19:33:43 GMT
Expires -1
Pragma no-cache
Server Microsoft-IIS/8.0
X-AspNet-Version 4.0.30319
X-Powered-By ASP.NET
当我在 sbx 环境中放置完全相同的代码时,我得到一个 204,但带有以下标头:
Cache-Control no-cache
Date Thu, 10 Oct 2013 19:39:59 GMT
Expires -1
Pragma no-cache
Server Microsoft-IIS/7.5
X-AspNet-Version 4.0.30319
X-Identifier 17253
X-Powered-By ASP.NET
相关的区别是第二个中缺少 contentType。
这产生的问题是,在Firefox(我认为是IE(中,它默认为xml,尝试解析它并失败。
我知道如何通过在 web api 控制器中设置我的 contentType 来解决此问题,但这对我来说似乎不是最好的解决方案。
所以,我要问的是 IIS 中的哪些设置差异可能导致这种情况?
谢谢
注意:我的网址看起来像这样/foo/bar/2,所以它不是 mimetype。
如果您的服务使用 204 进行响应,则响应不应包含消息正文。这是按规格。我只能假设您正在回复消息正文中的某些内容。
来自 API 方法的响应应如下所示:
return new HttpResponseMessage { StatusCode = System.Net.HttpStatusCode.NoContent }
编辑。我注意到你提到你返回"空"。您的方法应该返回带有我上面提到的状态代码的 HttpResponseMessage。
这将解决以下问题:
protected internal virtual IHttpActionResult NoContent()
{
HttpResponseMessage responseMsg = new HttpResponseMessage(HttpStatusCode.NoContent) {Content = new StringContent(string.Empty, Encoding.UTF8)};
return this.ResponseMessage(responseMsg);
}
但仍然没有解释为什么默认情况下添加 IIS:内容类型文本/html
或者更好的是如何使用web.config或IIS配置删除它。
我使用这个:
返回状态代码(HttpStatusCode.NoContent(;