asp.net-mvc - Autofac 注入(inject)自定义 Web-Api FilterAttribute

标签 asp.net-mvc asp.net-web-api inversion-of-control autofac

我有一个自定义的 ExceptionFilter,用于记录 Web-Api Controller 内所有未捕获的异常。我想使用 Autofac,向其注入(inject) ILog 配置。

我的问题是如何做到这一点? Autofac 网站几乎没有解释如何执行此操作。

自定义过滤器:

public class ApiControllerErrorFilterAttribute : ExceptionFilterAttribute
{
    private static readonly ILog log = LogManager.GetLogger("ApiLog");
    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {
        log.Error("Error: ", actionExecutedContext.Exception);
    }
}

附: 为了澄清起见,我还有一个用于普通 Controller 的自定义过滤器,并且我能够成功配置它。

普通 Controller 的过滤器:

public class ControllerErrorFilterAttribute : HandleErrorAttribute
{
    public ICustomLogSettings Log { get; set; }
    public override void OnException(ExceptionContext filterContext)
    {
        Log.GetLogger.Error("Error: ", filterContext.Exception);
    }
}

日志配置:

    builder.Register(c => new BaseLog()).As<ICustomLogSettings>().InstancePerRequest();
    builder.RegisterFilterProvider();

最佳答案

一些these examples可能会有所帮助,尤其是:

builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);

builder.Register(c => new MyWebApiFilter())
    .AsWebApiActionFilterFor<ValuesController>()
    .InstancePerApiRequest();

从中,它向我表明您可以注册一个像任何其他服务一样得到解析的过滤器,这意味着您应该能够执行以下操作:

public class ApiControllerErrorFilterAttribute : ExceptionFilterAttribute
{
    private readonly ILog _log

    public ApiControllerErrorFilterAttribute(ILog log)
    {
        _log = log;
    }

    public override void OnException(HttpActionExecutedContext actionExecutedContext)
    {
        _log.Error("Error: ", actionExecutedContext.Exception);
    }
}

然后就可以像这样注册它:

builder.RegisterType<ApiControllerErrorFilterAttribute>()
    .AsWebApiActionFilterFor<ValuesController>()
    .InstancePerApiRequest();

当然,你需要设置解析ILog的注册,这将与this part of the wiki非常相似。 .

关于asp.net-mvc - Autofac 注入(inject)自定义 Web-Api FilterAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25484150/

相关文章:

asp.net-mvc - 如何防止 ASP.NET MVC 在 Windows Azure 上处理静态文件(js 和图像)?

asp.net-web-api - 使用 Visual Studio Code 将 ASP.net core 2.1 WEB API 部署到 IIS

c# - 向 IoC 注册通用 UnitOfWork<> 时出错

c# - 使用 Autofac 作为服务定位器

c#-4.0 - 如何强制执行安装程序的执行顺序

jquery - 使用 jquery post for mvc 3 在部署时不起作用

c# - Web API 从小写字母开始序列化属性

asp.net-mvc - ASP.NET MVC 和 Razor 在 0 时显示整数或空白

c# - Validator.TryValidateObject 不验证属性

http - net/http : request canceled (Client. 等待 header 时超时)为什么/该怎么办?