捕获异常并处理我的自定义错误处理程序中的异常

时间:2016-04-26 14:59:29

标签: c# asp.net-mvc error-handling

我在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();
}

这会引发异常,但是如何使用自定义错误处理程序“捕获”此异常?

1 个答案:

答案 0 :(得分:0)

我通常创建一个控制器,其中包含引发特定异常的操作。

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

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

不是很花哨,但它确实起作用了。并且404处理程序是最容易测试的 - 只需输入一个错误的URL。