2011-08-27 80 views
4

如何在用WebMethod裝飾的aspx頁面方法中返回錯誤?如何從webmethod返回錯誤?

示例代碼

$.ajax({ 
    type: "POST", 
    url: "./Default.aspx/GetData", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: AjaxSucceeded, 
    error: AjaxFailed 
}); 

[WebMethod] 
public static string GetData() 
{ 

} 

一個人怎麼返回錯誤從一個WebMethod?所以人們可以使用jquery錯誤部分來顯示錯誤細節。

回答

6

我不知道是否還有更具有WebMethod的特定方法,但在ASP.NET中,您通常只需設置Response object的狀態代碼即可。類似這樣的:

Response.Clear(); 
Response.StatusCode = 500; // or whatever code is appropriate 
Response.End; 

使用標準錯誤代碼是向消費HTTP客戶端通知錯誤的適當方式。在結束回覆之前,您還可以Response.Write()任何要發送的郵件。這些格式的標準化程度較差,因此您可以創建自己的格式。但只要狀態碼準確地反映了響應,那麼您的JavaScript或任何其他使用該服務的客戶端都將瞭解錯誤。

+0

那麼'Response'對象來自哪裏呢?用戶的webmethod正在返回一個字符串。 – OmegaMan

+0

@OmegaMan:它不在Web方法的'HttpContext.Current'中,因爲它在ASP.NET中的其他位置? – David

+0

是的,它包含在該全局變量中。 'WebMethod's可能不會直接與它進行交互,這很好。 – OmegaMan

1

結果頁面的http狀態代碼(4xx - 用戶請求故障,5xx - 內部服務器故障)指示錯誤。我不知道asp.net,但我想你必須拋出異常或類似的東西。

+0

但是,這是否會向客戶披露頁面細節,例外情況? – Riga

+0

在您的錯誤頁面(或您使用的框架)上定義。大多數情況下你只是提出一個非常通用的錯誤信息 – ZeissS

3

只需在您的PageMethod中引發異常並將其捕獲到AjaxFailed中即可。類似的東西:

function onAjaxFailed(error){ 
    alert(error); 
} 
+0

通過將異常詳細信息傳遞給錯誤函數,拋出異常會執行OP要求的操作。當部署時,除非在web.config中設置了'customErrors'元素,否則這些元素只會顯示爲一般性錯誤(類似於「內部服務器錯誤」),從而破壞了向客戶端發送有用消息的目的,並將其捕獲錯誤功能。 –