How to override default unhandled exception output in Owin?

前端 未结 2 1029
走了就别回头了
走了就别回头了 2021-01-04 10:41

I\'ve written simple server using Owin Self-hosting and WebApi:

namespace OwinSelfHostingTest
{
    using System.Threading;
    using System.Web.Http;
    us         


        
2条回答
  •  余生分开走
    2021-01-04 11:16

    You do so by creating an OWIN MiddleWare and hooking it into the pipeline:

    public class CustomExceptionMiddleware : OwinMiddleware
    {
       public CustomExceptionMiddleware(OwinMiddleware next) : base(next)
       {}
    
       public override async Task Invoke(IOwinContext context)
       {
          try
          {
              await Next.Invoke(context);
          }
          catch(Exception ex)
          {
              // Custom stuff here
          }
       }
     }
    

    And hook it on startup:

    public class Startup
    {
        public void Configuration(IAppBuilder builder)
        {
            var config = new HttpConfiguration();
    
            config.Routes.MapHttpRoute(
                "Default",
                "{controller}/{id}",
                new { id = RouteParameter.Optional }
                );
    
            builder.Use().UseWebApi(config);
        }
    }
    

    That way any unhandled exception will be caught by your middleware and allow you to customize the output result.

    An important thing to note: if the thing being hosted has an exception handling logic of it's own, as WebAPI does, exceptions will not propagate. This handler is meant for any exception which goes by unhandeled by the underlying service being hosted.

提交回复
热议问题