2013-10-10 139 views
0

好吧,所以我有一个带有放置动作和返回类型void的web api控制器。当我使用VS的内置iisepxress运行它并调用它时,我得到了预期的204。在这里的标题:Web APi Void,IIS express内容类型,IIS没有内容类型

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中的设置差异可能导致这种情况?

感谢

注: 我的URL看起来像这样/富/酒吧/ 2,这样它就不会MIME类型。

回答

1

如果您的服务以204响应,则响应不应包含消息体。 This is by spec。我只能假设你正在回复邮件正文中的某些内容。

你从API方法的反应应该是这样的:

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

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

0

这将解决isssue:

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

但仍然没有解释为什么IIS默认情况下,添加: 内容类型text/html

甚至更​​好如何使用网络将其删除.config或IIS配置。