全局异常处理程序不处理错误(web api)

时间:2016-06-30 22:03:06

标签: c# .net asp.net-web-api exception-handling

我是一个全局异常处理程序类,以便处理我的异常:

namespace MyProject.Extensions
{
    public class MyExceptionHandler : ExceptionHandler
    {
        public override void Handle(ExceptionHandlerContext context)
        {
            context.Result = new MyErrorResult
            {
                Request = context.ExceptionContext.Request,
                ContextException = context.Exception
            };
        }

     }

    private class MyErrorResult : IHttpActionResult
    {
        public HttpRequestMessage Request { get; set; }
        public Exception ContextException { get; set; }

        public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
        {
            HttpResponseMessage response = MyErrorResponse(Request, ContextException);
            response.RequestMessage = Request;

            return Task.FromResult(response);
        }
    }
}

然后在global.asax中注册它:

    protected void Application_Start()
    {
        ConfigureLog4Net();
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        DependencyConfig.RegisterDependencies(GlobalConfiguration.Configuration);
        GlobalConfiguration.Configuration.EnsureInitialized();
    }

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Services.Replace(typeof(IExceptionHandler), new MyExceptionHandler());

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}",
            defaults: new { action = RouteParameter.Optional }
        );
    }
}

当我在我的一个控制器中抛出测试异常时,Visual studio停止并发出错误'异常未处理'。我究竟做错了什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

Visual Studio(VS)停止并提供错误&#39;异常未处理&#39;因为这是在调试模式下有未处理的异常时的默认VS行为(&#34;抛出时断开&#34;)。

要更改此内容,请转到&#34;调试&#34; - &GT; &#34;视窗&#34; - &GT; &#34;例外设置&#34;

您将打开一个窗口,在那里您可以更改&#34;在抛出时中断&#34;条件。在您的情况下,您需要使用&#34;公共语言运行时例外&#34;部分:取消选中整个部分或特定类型的例外。

enter image description here

另一个检查选项是在VS之外启动Web Api应用程序(作为自托管或使用IIS)。