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。

Web APi 无效,IIS Express 内容类型,IIS 无内容类型

如果您的服务使用 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(;