Как перехватить исключение Autofac.Core.DependencyResolutionException, чтобы зарегистрировать его? ⇐ C#
-
Anonymous
Как перехватить исключение Autofac.Core.DependencyResolutionException, чтобы зарегистрировать его?
У меня есть проект WebApi2 asp.net framework 4.8 с Autofac для DI, и когда я отправляю запрос на действия на данном контроллере, я получаю ошибку 500, и содержимое показывает, что это связано с отсутствующей зависимостью. Совершенно верно, я забыл настроить одну из своих зависимостей.
"ExceptionType": "System.InvalidOperationException", "StackTrace": "в System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(запрос HttpRequestMessage, HttpControllerDescriptor ControllerDescriptor, Type ControllerType)\r\n в System.Web.Http.Dispatcher.HttpControllerDispatcher.d__15.MoveNext() ", ... Внутреннее исключение... "ExceptionType": "Autofac.Core.DependencyResolutionException", "StackTrace": "в Autofac.Core.Activators.Reflection.ReflectionActivator.c__DisplayClass14_0.b__0(контекст ResolveRequestContext, Action`1 следующее)\r\n в Autofac.Core.Resolver.Pipeline.ResolvePipelineBuilder. c__DisplayClass14_0.b__1(контекст ResolveRequestContext)\r\n в Autofac.Core.Resolve.Middleware.DisposalTrackingMiddleware.Execute(контекст ResolveRequestContext, Action`1 следующее)\r\n в Autofac.Core.Resolve.Pipeline.ResolvePipelineBuilder. c__DisplayClass14_0.b__1(контекст ResolveRequestContext)\r\n в Autofac.Core.Resolve.Middleware.ActivatorErrorHandlingMiddleware.Execute(контекст ResolveRequestContext, действие `1 следующее)" Некоторое время я вызывал API из другого приложения, и запрос просто исчезал, и в моих журналах ничего не появлялось ни для одного приложения, что было бы очень полезно для более быстрого решения проблемы.
В проекте WebApi у меня есть класс фильтра исключений UnhandledExceptionFilter: ExceptionFilterAttribute для регистрации любых необработанных исключений. У меня он зарегистрирован глобально, например
Конфигурация HttpConfiguration = GlobalConfiguration.Configuration; config.Filters.Add(новый UnhandledExceptionFilter()); И я был убежден, что, учитывая, что DI контроллера происходит во время конвейера запросов, это исключение попадет в этот фильтр и зарегистрируется, однако этого не происходит. Я протестировал создание исключения из действия на другом контроллере, и UnhandledExceptionFilter сработал должным образом и зарегистрировал это исключение, поэтому я уверен, что это работает.
Итак, я предполагаю, что либо разрешение зависимостей происходит вне этого контекста и, следовательно, не передается фильтру, либо оно происходит внутри этого контекста, но что-то (возможно, autofac или webapi??) проглатывая его дальше по цепочке.
Кто-нибудь знает, что мне нужно, чтобы зарегистрировать это исключение?
У меня есть проект WebApi2 asp.net framework 4.8 с Autofac для DI, и когда я отправляю запрос на действия на данном контроллере, я получаю ошибку 500, и содержимое показывает, что это связано с отсутствующей зависимостью. Совершенно верно, я забыл настроить одну из своих зависимостей.
"ExceptionType": "System.InvalidOperationException", "StackTrace": "в System.Web.Http.Dispatcher.DefaultHttpControllerActivator.Create(запрос HttpRequestMessage, HttpControllerDescriptor ControllerDescriptor, Type ControllerType)\r\n в System.Web.Http.Dispatcher.HttpControllerDispatcher.d__15.MoveNext() ", ... Внутреннее исключение... "ExceptionType": "Autofac.Core.DependencyResolutionException", "StackTrace": "в Autofac.Core.Activators.Reflection.ReflectionActivator.c__DisplayClass14_0.b__0(контекст ResolveRequestContext, Action`1 следующее)\r\n в Autofac.Core.Resolver.Pipeline.ResolvePipelineBuilder. c__DisplayClass14_0.b__1(контекст ResolveRequestContext)\r\n в Autofac.Core.Resolve.Middleware.DisposalTrackingMiddleware.Execute(контекст ResolveRequestContext, Action`1 следующее)\r\n в Autofac.Core.Resolve.Pipeline.ResolvePipelineBuilder. c__DisplayClass14_0.b__1(контекст ResolveRequestContext)\r\n в Autofac.Core.Resolve.Middleware.ActivatorErrorHandlingMiddleware.Execute(контекст ResolveRequestContext, действие `1 следующее)" Некоторое время я вызывал API из другого приложения, и запрос просто исчезал, и в моих журналах ничего не появлялось ни для одного приложения, что было бы очень полезно для более быстрого решения проблемы.
В проекте WebApi у меня есть класс фильтра исключений UnhandledExceptionFilter: ExceptionFilterAttribute для регистрации любых необработанных исключений. У меня он зарегистрирован глобально, например
Конфигурация HttpConfiguration = GlobalConfiguration.Configuration; config.Filters.Add(новый UnhandledExceptionFilter()); И я был убежден, что, учитывая, что DI контроллера происходит во время конвейера запросов, это исключение попадет в этот фильтр и зарегистрируется, однако этого не происходит. Я протестировал создание исключения из действия на другом контроллере, и UnhandledExceptionFilter сработал должным образом и зарегистрировал это исключение, поэтому я уверен, что это работает.
Итак, я предполагаю, что либо разрешение зависимостей происходит вне этого контекста и, следовательно, не передается фильтру, либо оно происходит внутри этого контекста, но что-то (возможно, autofac или webapi??) проглатывая его дальше по цепочке.
Кто-нибудь знает, что мне нужно, чтобы зарегистрировать это исключение?
Мобильная версия