2009-04-21 44 views
1

我在我的aspx頁面中使用屬性[WebMethod]的方法。我不使用任何asp.net ajax,但jQuery調用這些方法並以JSON返回對象。這一切工作正常。隱藏堆棧跟蹤由asp.net WebMethod返回的異常?

接下來,我在webMethod中添加了一個授權檢查,如果當前用戶無法訪問我需要讓調用JavaScript知道的功能。

所以我拋出一個AccessViolationException異常,然後可以通過JavaScript中的OnError回調函數進行解析。這也適用,但是這個例外包括完整的StackTrace,我不想讓這個提供給調用客戶端。

當WebMethod返回一個業務對象時,我可以使用哪些其他方式將「拒絕訪問」返回給客戶端?

我使用ASP.Net 3.5SP1和jQuery 1.32

回答

2

爲什麼傳播通過導線錯誤?爲什麼不使用錯誤響應?

只是將您的對象包裝在響應對象中,該響應對象可以包含狀態錯誤代碼和錯誤消息以呈現給用戶。

+0

我想我很少控制WebMethod的返回值,我可以返回預期的業務對象或null。我怎麼會在那裏拋出'錯誤迴應'? – 2009-04-21 16:57:59

+0

你可以將你的BusinessObject封裝在一個可以自己擁有狀態的ResponseObject中。你不能嗎? – 2009-04-21 17:00:11

0

當事情真的出錯時,我會保存例外情況。 (例如無法連接到數據庫)

要麼不返回任何內容(null/nill/whatever),要麼返回一個假布爾值。我不得不繼續尋找我自己。

1

至於建議由NunFur我改變我的做法和而不是拋出一個錯誤,我返回一個「富裕」的對象。

至少有兩個選項,第一個選項是將我的業務對象封裝到具有某些狀態屬性的響應對象中。我嘗試過,但它使JSON更復雜。 因此,而不是添加一個新的對象,我添加了兩個屬性到我的業務對象,如ServiceStatus和ServiceMessage。默認情況下,這些是200和'',但如果出現任何錯誤(無法訪問,錯誤),可以通過WebMethod代碼進行設置。在這種情況下,他們的業務對象將是'空'(無數據)。 JavaScript代碼首先檢查ServiceStatus並作出適當的反應。

我將這兩個字段添加到WebMethods返回的所有對象中,即使是一個簡單的字符串。他們必須實現與這兩個屬性的接口。

現在我完全控制了電線,以防意外情況發生。

感謝輸入

1

您還可以添加一個:在你的web.config

customErrors mode="On"/ 

,這將切掉堆棧跟蹤,讓你只異常消息