2

未処理の例外をキャッチしてログに記録できるように、いくつかのミドルウェアを追加しようとしていますが、そうするのにいくつかの問題が発生しています。これについて多くを見つけることができず、何らかの奇妙な理由で私のコードが catch ブロックに入っていないようです。これを適切に処理しているようで、辞書を調べても例外が表示されません。

私がやりたいことは、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");
    }
}   
4

1 に答える 1

0

これは、WebApi が例外を処理しているためです。コントローラーによってスローされた例外を処理する必要があります。ExceptionFilterAttribute

于 2016-02-16T21:55:19.720 に答える