Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Autofac(WebApi)IAutofaceExceptionFilter OneException调用两次_C#_Dependency Injection_Asp.net Web Api_Autofac_Filterattribute - Fatal编程技术网

C# Autofac(WebApi)IAutofaceExceptionFilter OneException调用两次

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

我在使用autofac for web api时遇到问题。我有一个自定义的ExceptionFilterAttribute,它覆盖OneException来记录和处理可能发生的任何异常。ExceptionFilterAttribute应用于一个ApicController类

过滤器代码如下所示:

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,