好的,所以我有一个带有动作和返回类型为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。
答案 0 :(得分:1)
如果您的服务使用204响应,则响应不应包含消息正文。 This is by spec。我只能假设您正在回复邮件正文中的内容。
您对API方法的回答应如下所示:
return new HttpResponseMessage { StatusCode = System.Net.HttpStatusCode.NoContent }
修改的。我注意到你提到你返回“无效”。您的方法应该使用我在上面提到的StatusCode返回HttpResponseMessage。
答案 1 :(得分: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配置删除它。
答案 2 :(得分:0)
我用这个:
返回StatusCode(HttpStatusCode.NoContent);