2013-10-02 17 views
0

我正在使用由JQuery/ajax以JSON格式調用的ASP.NET WebMethods。添加由JQuery調用的ASP.NET WebMethods的異常信息Ajax

我必須通過爲用戶提供更多信息來改進異常處理。

我捕捉到原始異常,並拋出一個「UserFriendlyException」,其中只設置了「Headline」和「Description」。

我只得到一個非常基本的JSON字符串 {「消息」:「「有錯誤處理的請求。」,「堆棧跟蹤」:「」,「ExceptionType」」}

我一直在尋找對於一些解決方案,發現頁面,如: http://encosia.com/use-jquery-to-catch-and-display-aspnet-ajax-service-errors/https://stackoverflow.com/a/891442/1099519

在那裏你可以訪問的消息,這是很好的,但我仍希望訪問多個屬性。我見過的大多數文章通常都建議使用statusCode來代替「ID」。

我想到了一個不同的方法:可能有一種方法來重寫某些方面的異常渲染(比如在WCF中可以修改完整的消息),所以在這種情況下,我可以捕捉到我的UserException和通過我自己渲染一個JSON字符串?

任何想法?

感謝您的幫助, 多米尼克

+0

你能澄清什麼,你叫「但還是我想訪問多個屬性。」 - 如果捕獲異常並將它們重新拋出爲用戶定義的異常類型,則您已完全控制該自定義異常的屬性... –

回答

0

我實際上以一種非常不同的方式解決了它。 我不能更多的信息添加到異常,所以我需要找到另一種解決方案:

我創建了一個JsonException我只是可以傳遞一個「JsonContainer」對象和調用toString()的時候,我逃避的屬性在JsonContainer中添加到Json字符串中。

那麼到底,異常的消息,其中含有全部我想要的信息的JSON字符串,我可以分析它在JQuery的是這樣的:

if (data.responseJSON && data.responseJSON.ExceptionType == "InhouseWKOIT.Framework.BusinessEntities.Web.JsonContainerException") { 
    var messageObject = JSON.parse(data.responseJSON.Message); 
    var someInformation = messageObject.MyProperty1; 
    var someMoreInformation = messageObject.MoreInformation; 
} 

這工作相當精細,美觀大方&順利:-)

瀏覽器只需要支持JSON.parse方法(無論是本地或使用插件)

0

只要傳遞錯誤異常的類對象,在你返回的WebMethod對象設置了一個param。

這是我們用它來調用Web方法

this.Execute = function (HandlerName, Method, JsonData, SuccessCallBack, ShowLoading, LoaderText, AsyncMode,  ErrorCallback) 
    { 
     return this.Post(serviceLocation.format(HandlerName, Method), JsonData, SuccessCallBack, ShowLoading, LoaderText, AsyncMode, ErrorCallback) 
    }; 

的,當我們處理服務,如果出現了錯誤,我們只是傳遞異常消息作爲結果jQuery的方法。希望這是你正在尋找的。所以基本上,不要使用Jquery消息,而是將返回對象作爲一個對象與拋出異常的代碼一起發回。