2012-03-13 190 views
2

部署ASP.NET MVC 4 Web API的問題部署ASP.NET MVC 4 Web API

我嘗試部署ASP.NET MVC 4 Web API站點。一切工作正常,但如果我從外部調用服務器並返回HTTP狀態400和以上,Web服務器接管響應。

在服務器本地調用工作正常。

例子:

Work fine: 
http:// myTestServer.se/Test/api/Test/200 
http:// myTestServer.se/Test/api/Test/399 

Does not work, the Web server takes over the response: 
http:// myTestServer.se/Test/api/Test/400 
http:// myTestServer.se/Test/api/Test/599 
     For those cases where there is an Error Pages is returned. For an invalid code is returned 」The custom error module does not recognize this error.」 

if I make the calls locally on the server, it works fine: 
http://localhost/Test/api/Test/400 
http://localhost/Test/api/Test/599 

我簡單的測試代碼將返回接收到的ID作爲HTTP狀態..

// GET /api/values/200 
public HttpResponseMessage<string> Get(int id) 
{ 
    try 
    { 
     HttpStatusCode StatusCode = (HttpStatusCode)id; 
     return new HttpResponseMessage<string>("Status Code : " + StatusCode.ToString(), StatusCode); 
    } 
    catch { 
     return new HttpResponseMessage<string>("Unable to convert the id", HttpStatusCode.OK); 
    } 
} 
+0

爲了能夠讓您的Web服務器和本地操作相同,請將IIS errorMode設置設置爲自定義而不是DetailedLocalOnly(這是默認設置)。看到這個網站關於它的設置http://www.iis.net/configreference/system.webserver/httperrors – 2014-03-18 19:00:18

回答

5

這就是所謂的 「聰明的錯誤消息」 的問題。 IIS正在劫持你的錯誤信息並用他自己的代替它。典型的解決辦法是TrySkipIisCustomErrors設置爲true:

Response.TrySkipIisCustomErrors = true; 

我沒有檢查這是否會使用Web API的工作。你可以閱讀更多關於問題herehere

+2

解決它通過配置Web服務器根據[asp-net-web-api-httpresponseexception-400-不好的請求被劫持的iis](http://stackoverflow.com/questions/9985327/asp-net-web-api-httpresponseexception-400-bad-request-hijacked-by-iis) – Joakim 2012-04-17 06:18:23

+0

Joakim的評論沒有爲我工作。我需要在這裏使用這個方法:http://stackoverflow.com/a/25555786/788846 – bowerm 2015-04-29 16:47:24

0

而不是返回一個新的HttpResponseMessage,使用請求,以便該響應完全水合,並將通過IIS恢復原狀。

return Request.CreateResponse(HttpStatusCode.OK, "Status Code : " + StatusCode.ToString()); 
+0

我注意到的一件事是我必須指定第二個參數(內容),否則IIS仍然會顯示自定義錯誤頁面。 – 2014-03-18 20:56:16