C# Autofac(WebApi)IAutofaceExceptionFilter OneException调用两次
我在使用autofac for web api时遇到问题。我有一个自定义的ExceptionFilterAttribute,它覆盖OneException来记录和处理可能发生的任何异常。ExceptionFilterAttribute应用于一个ApicController类 过滤器代码如下所示:C# Autofac(WebApi)IAutofaceExceptionFilter OneException调用两次,c#,dependency-injection,asp.net-web-api,autofac,filterattribute,C#,Dependency Injection,Asp.net Web Api,Autofac,Filterattribute,我在使用autofac for web api时遇到问题。我有一个自定义的ExceptionFilterAttribute,它覆盖OneException来记录和处理可能发生的任何异常。ExceptionFilterAttribute应用于一个ApicController类 过滤器代码如下所示: public class ExceptionFilterAttribute : ExceptionFilterAttribute, IAutofacExceptionFilter { priva
public class ExceptionFilterAttribute : ExceptionFilterAttribute, IAutofacExceptionFilter
{
private ILogger _logger;
public ExceptionFilterAttribute()
{
}
public ExceptionFilterAttribute(ILogger logger)
{
_logger = logger;
}
public override void OnException(HttpActionExecutedContext context)
{
// Removed for brevity
}
}
在autofac配置中,有许多已注册的类型,我已从下面删除,它们类似:
var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<ReflectionClassReader>().As<IClassReader>();
builder.RegisterType<Logger>().As<ILogger>();
builder.RegisterModule<DataModule>();
builder.Register(c => new ExceptionFilterAttribute(c.Resolve<ILogger>()))
.AsWebApiExceptionFilterFor<ApiController>().SingleInstance();
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
var container = builder.Build();
configuration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
var builder=newcontainerbuilder();
RegisterAppController(Assembly.getExecutionGassembly());
builder.RegisterType().As();
builder.RegisterType().As();
builder.RegisterModule();
Register(c=>newexceptionFilterAttribute(c.Resolve()))
.aswebapieexceptionfilterfor
有人有什么想法吗?非常感谢 尝试删除该行
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
我认为这会导致两次注册异常过滤器。如果您有其他需要注册的过滤器,您几乎没有选择
a。尝试仅使用AutoFac builder注册这些过滤器。我的意思是只使用一个机制寄存器过滤器
b。创建一个可以删除/添加过滤器(如果过滤器已被复制)等(网上有很多示例,但不在这个问题的范围内)认为这里的问题是您同时使用了属性和过滤器。
由于该属性,api将在引擎盖下调用so,这将是一个空记录器,然后由autofac通过过滤器注册再次调用,这将填充由autofac创建的记录器
尝试将该类更新为此
public class ExceptionFilterAttribute : IAutofacExceptionFilter
正在删除ExceptionFilterAttribute,