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

标签 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();
}

这引发了一个异常,但是如何使用我的自定义错误处理程序“捕获”该异常?

最佳答案

我通常会创建带有引发特定异常的 Action 的 Controller 。

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

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

不花哨,但能胜任。 404处理程序最容易测试-只需输入错误的网址即可。

关于c# - 捕获异常并在我的自定义错误处理程序中处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36868665/

相关文章:

c# - C#中设置匿名函数的参数值

c# - 重绘时控制台闪烁

C# GUI 宏库或通用方法?

asp.net-mvc - Azure 应用服务可用性损失。内存计数器每秒页读取数处于危险水平

java - 差异错误代码或异常

javascript - 从代码隐藏中的javascript函数检索值

c# - 如何在 ASP.NET 应用程序中使用 SSL

asp.net-mvc - .Net Core 中的 SEO 网址

python - 如何解决TypeError : unsupported operand type(s) for +: 'float' and 'tuple'

django - Jinja和Django无效的阻止标签: 'set' , expected 'endblock'