2015-02-11 139 views
0

當我的應用程序發出ajax調用時,我發出錯誤並希望在客戶端捕獲它。哪種方法最好。從ajax調用中檢索服務器端錯誤詳細信息(c#)

我的服務器端代碼:

try 
{ 
    ... 
} 
catch (Exception ex) 
{ 
    throw new HttpException("This is my error", ex); 
} 

我的客戶端代碼:

var url = $(this).attr('href'); 
var dialog = $('<div style="display:none"></div>').appendTo('body'); 

dialog.load(url, {}, 
    function (responseText, status, XMLHttpRequest) { 

      if (status == "error") { 
       alert("Sorry but there was an error: " + XMLHttpRequest.status + " " + XMLHttpRequest.statusText); 
       return false; 
      } 
      .... 

在運行時,在調試時,我沒有得到我的錯誤的詳細信息,你可以在看下面的截圖:

enter image description here

我得到一個一般性錯誤:

status: 500 
statusText: Internal Server Error 

如何獲取我發送的詳細信息:「這是我的錯誤」?

回答

0

做這樣的事情

服務器端:

try{ 
//to try 
}catch(Exception ex) 
{ 
    return this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Error :"+ ex.Message); 
} 

那麼請求將返回錯誤500 JavaScript,但與你的異常消息。

+1

請注意IIS,[如果配置爲這樣做](http://blogs.msdn.com/b/rakkimk/archive/2007/05/25/iis7-how-to-enable-the-detailed-錯誤消息爲網站,而瀏覽從客戶端browsers.aspx),仍然會阻礙。 – 2015-02-11 12:47:57

+0

@James Thorpe:我如何配置IIS以允許自定義錯誤? – Bronzato 2015-02-11 12:50:51

+0

@Bronzato按照鏈接中的說明:) – 2015-02-11 12:53:12

1

最後我用這個方法:

Web.config文件:

<system.web> 
    <customErrors mode="On" defaultRedirect="~/error/Global"> 
    <error statusCode="404" redirect="~/error/FileNotFound"/> 
    </customErrors> 
</system.web> 

ErrorController:

public class ErrorController : Controller 
{ 
    public ActionResult Global() 
    { 
     return View("Global", ViewData.Model); 
    } 
    public ActionResult FileNotFound() 
    { 
     return View("FileNotFound", ViewData.Model); 
    } 
} 

不要忘記創建2個特定的視圖。

最後,當我需要拋出特定的錯誤代碼&的描述,我繼續像這樣:

public ActionResult MyAction() 
    { 
     try 
     { 
      ... 
     } 
     catch 
     { 
      ControllerContext.RequestContext.HttpContext.Response.StatusCode = 500; 
      ControllerContext.RequestContext.HttpContext.Response.StatusDescription = "My error message here"; 
      return null; 
     } 
    } 

然後客戶端我收到這樣的錯誤信息。

相關問題