0

好的,所以我有一个带有 put 操作和返回类型 void 的 web api 控制器。当我使用 VS 的内置 iiepxress 运行它并调用它时,我按预期返回 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。

4

3 回答 3

1

如果您的服务以 204 响应,则响应不应包含消息正文。这是按规格。我只能假设您正在回复您的消息正文中的某些内容。

您对 API 方法的响应应该是这样的:

return new HttpResponseMessage { StatusCode = System.Net.HttpStatusCode.NoContent }

编辑. 我注意到您提到您返回“无效”。您的方法应该返回带有我上面提到的 StatusCode 的 HttpResponseMessage。

于 2013-10-10T21:00:04.840 回答
0

这将解决问题:

    protected internal virtual IHttpActionResult NoContent()
    {
        HttpResponseMessage responseMsg = new HttpResponseMessage(HttpStatusCode.NoContent) {Content = new StringContent(string.Empty, Encoding.UTF8)};
        return this.ResponseMessage(responseMsg);
    }

但仍然没有解释为什么 IIS 默认添加:Content-Type text/html

或者更好的是如何使用 web.config 或 IIS 配置删除它。

于 2017-07-21T14:57:28.450 回答
0

我用这个:

返回状态码(HttpStatusCode.NoContent);

于 2018-11-13T17:01:11.247 回答