2015-12-16 2 views
2

Я пытаюсь добавить некоторое промежуточное программное обеспечение, чтобы любые необработанные исключения я улавливал и регистрировал, но испытывал некоторые трудности при этом. Не удалось найти много на этом и по какой-то нечетной причине мой код, кажется, не входит в блок catch. Похоже, что он грамотно справляется с этим и даже допрашивает словарь, я не вижу исключения.Обработка исключений в OWIN Middlware

Я хочу, чтобы это произошло, введите блок catch, чтобы захватить исключение и зарегистрировать трассировку стека.

Код:

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     var config = new HttpConfiguration(); 

     app.Use(typeof(FooHandler)); 
     app.UseWebApi(config); 
    } 
} 

public class FooHandler : OwinMiddleware 
{ 
    private static readonly ILog Logger = LogManager.GetLogger(typeof(FooHandler)); 

    public FooHandler(OwinMiddleware next) : base(next) 
    { 
    } 

    public override async Task Invoke(IOwinContext context) 
    { 
     if (Logger.IsErrorEnabled) 
     { 
      try 
      { 
       await Next.Invoke(context); 
      } 
      catch (Exception ex) 
      { // DOESN'T FALL INTO HERE! 
       Logger.Error(message, ex); 
      } 
     } 
    } 
} 

public class FooController : ApiController 
{   
    public Task<IHttpActionResult> Get() 
    { 
     throw new Exception("Foo Bar"); 
    } 
} 

ответ

0

Это потому, что WebAPI обрабатывает исключение. Вам нужно будет обрабатывать исключения, брошенные контроллерами в ExceptionFilterAttribute