【问题标题】:Capture exceptions and handle those in my custom error handler捕获异常并在我的自定义错误处理程序中处理这些异常
【发布时间】:2016-04-26 14:59:28
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    我通常会创建一个带有引发特定异常的操作的控制器。

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

    并不花哨,但它确实可以完成工作。 404 处理程序是最容易测试的 - 只需输入错误的 url。

    【讨论】:

      猜你喜欢
      • 2018-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 2013-05-28
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多