2016-04-26 43 views
0

我在Global.asax中定義我的自定義錯誤處理程序:捕獲異常和處理這些在我的自定義錯誤處理程序

void Application_Error(Object sender, EventArgs e) 
{ 
    var exception = Server.GetLastError(); 
    var httpException = exception as HttpException; 
    Response.Clear(); 
    Server.ClearError(); 

    var routeData = new RouteData(); 
    routeData.Values["controller"] = "Error"; 
    routeData.Values["action"] = "General"; 
    routeData.Values["exception"] = exception; 
    Response.StatusCode = 500; 

    if(httpException != null) 
    { 
     Response.StatusCode = httpException.GetHttpCode(); 
     switch(Response.StatusCode) 
     { 
      case 403: 
       routeData.Values["action"] = "Http403"; 
       break; 
      case 404: 
       routeData.Values["action"] = "Http404"; 
       break; 
     } 
    } 

    IController errorController = new ErrorController(); 
    var rc = new RequestContext(new HttpContextWrapper(Context), routeData); 
    errorController.Execute(rc); 

} 

我試着通過我的服務模式提出這樣的錯誤來測試我的錯誤處理程序:

if(albums != null) 
{ 
    albums = null; 
    ctx.SpotifyAlbums.AddRange(albums); 
    ctx.SaveChanges(); 
} 

這引發了一個異常,但我怎樣才能用我的自定義錯誤處理程序「捕捉」這個異常?

回答

0

我通常使用拋出特定異常的操作來創建一個控制器。

public class ErrorTestController : Controller 
{ 
    public ActionResult ThrowHttpException(int httpStatusCode) 
    { 
     throw new HttpException(httpStatusCode, "Error!"); 
    } 

    public ActionResult ThrowApplicationError() 
    { 
     Throw new Exception("Boo!"); 
    } 
} 

不花哨,但它做的工作。而404處理程序是最容易測試的 - 只需輸入一個錯誤的URL。

相關問題