2011-12-08 12 views
2

我們有一個處理數據庫請求的C#AJAX服務器,我們希望在異常時返回一個400/403/500狀態碼,以便我們可以瞭解發生在客戶端。但是,我們回覆的內容是響應正文中的「錯誤請求」。如何使用C#/ ASP.Net返回responseText中的錯誤

例如,如果駕駛員ADO.Net返回該消息:傳遞給LEFT或SUBSTRING函數

無效長度參數。 無法將值NULL插入'--COLUMN--'列中,表 '--DATABASE.SCHEMA.TABLE--';列不允許有空值。 INSERT 失敗。該語句已終止。

然後我們的AJAX服務器直接返回這樣的文字:

壞請求

我已經看過在Chrome充分響應頭並沒有什麼甚至遠程類似於此錯誤消息那裏。這是我們用來發送錯誤返回的代碼:

catch (Exception ex) 
{ 
    //Response.TrySkipIisCustomErrors = true; 
    Response.StatusCode = (int)HttpStatusCode.SC_BAD_REQUEST; 
    Response.Write(ex.Message); 
    Response.Flush(); 
} 

在Java/JSP相當於這臺服務器,我們正在使用此代碼正確的行爲:

} catch (Exception e) { 

    response.sendError(response.SC_BAD_REQUEST, e.getClass() + " : " + e.getMessage()); 

}  

回答

1

那裏有幾個可能會出錯的事情,但我會準備好打賭你在IIS7上運行,並且它的默認值導致它重寫錯誤。嘗試使用httpErrors配置設置中的TrySkipIisCustomErrors屬性和existingResponse屬性。

+1

將此添加到web.config中有訣竅 - 非常感謝! ' ' – Graham

0

服務器將錯誤消息封裝到錯誤的請求中,以防止安全細節到達客戶端。您可以通過將customErrors設置爲關閉來修改此行爲。

<system.web> 
    <customErrors mode="Off"> 
    </customErrors> 
</system.web> 
+0

這影響如果ASP.NET以外的東西提出了一個其中被選擇錯誤,而不是那些明確設定的,不是嗎? –

+0

我剛剛在web.config中更改了它,並沒有任何效果。 – Graham