2013-03-22 99 views
0

我有一些自定義錯誤消息我想要顯示給用戶。所以,當他們說輸入錯誤的用戶名/密碼組合,我可能在我的代碼做到這一點:自定義400消息被覆蓋

Response.StatusCode = 400; 
return Json("Invalid username or password"); 

這是我的本地機器上正常工作。我已經部署到虛擬主機和這些消息是由服務器被覆蓋,所以,他們都站出來爲:

無法顯示該網頁,因爲內部服務器錯誤有 發生。

服務器顯然是想保護我從中透出什麼地方發生了錯誤,但其實我想這個錯誤要經過和被用戶看到的敏感信息(也真是的,我的代碼解析,然後顯示) 。

我認爲web.config中有一些東西可以做到這一點,但迄今爲止我嘗試過的所有東西都無法工作。有任何想法嗎?

web.config中的有關章節,因爲我有現在:

<system.webServer> 
    <httpErrors errorMode="Custom" existingResponse="PassThrough"> 
    </httpErrors> 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    etc. 

回答

0

解決方案最終將完全從web.config中移除< httpErrors>元素。即使將其設置爲其默認選項,如http://www.iis.net/configreference/system.webserver/httperrors也無法正常工作,所以我有點困惑爲什麼要將其刪除。

<system.webServer> 
    **Remove <httpErrors> !** 
    <validation validateIntegratedModeConfiguration="false"/> 
    <modules runAllManagedModulesForAllRequests="true"/> 
0

爲了處理你需要添加在web.config文件中的具體映射每個HTTP錯誤代碼

<customErrors mode="On/RemoteOnly" > 
     <error statusCode="400" redirect="My400View" /> 
     <error statusCode="404" redirect="My404iew" /> 
     <error statusCode="500" redirect="My500View" /> 
    </customErrors> 
+0

那麼,這是一個AJAX調用,所以沒有看法。我想顯示一條文本消息,通知用戶他們的輸入未被接受。你的建議會對此有用嗎? – JPRO 2013-03-22 23:22:38

+0

如果你使用jQuery,你可以使用'statusCode'屬性(http://api.jquery.com/jQuery.ajax/) – pollirrata 2013-03-22 23:30:29

+0

如果我有多個錯誤消息?響應中有一條描述性錯誤消息,我可以在本地看到。問題是我的託管服務器中有一些東西阻止了它的傳遞。 – JPRO 2013-03-23 01:17:16

2

默認情況下,某些HTTP狀態代碼被IIS隱藏並被替換。但是,它可以使用該行進行配置:

<system.webServer> 
    <httpErrors errorMode="Detailed"/> 

這將允許你在響應通過您的自定義消息,當AJAX調用完成閱讀它在客戶端。

+0

我也認爲它會是這樣的,特別是「PassThrough」部分。無論如何,我嘗試了你在答案中的確切方式,並且仍然得到簡單的單行信息。 :\ – JPRO 2013-03-23 15:11:28

+0

爲我工作。注意不要將它與「」的「」混淆。 – 2014-01-13 17:13:30