繁体   English   中英

在webapi2中将过滤器与autofac一起使用

[英]using filters with autofac in webapi2

我有一个动作过滤器,如下所示。过滤器基本上为响应的标题添加了一些属性。

 public class myHeaderAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
        {
            if (actionExecutedContext.Response != null)
            //my code goes here
            base.OnActionExecuted(actionExecutedContext);
        }
    }

我通常会在WebApiConfig.Register中将其称为config.Filters.Add(new myHeaderAttribute());

我希望在我的项目中使用Autofac。

autofac网站上有一个页面( http://docs.autofac.org/en/latest/integration/webapi.html) ,其中介绍了实现IAutofacActionFilter的过程。

但是,我不清楚我应该做什么。

我可以创建另一个实现IAutofacActionFilter的类,并添加onActionExecuted方法。 但是我是否还要保留当前类或将其与WebApiConfig.Register中的行一起删除。

该页面还谈到注册Autofac筛选器提供程序以及实现IAutofacActionFilter的类。 但是不存在完整的示例。

另外,它说的是使用“服务位置”,以防我们在过滤器中需要每个请求或每个实例的服务。

整个事情似乎让我有些困惑。 如果能理解这些概念并在Web api2项目中使用Autofac的人能为我提供指导,我将由衷的感谢。

谢谢

去掉它。 它在您自己引用的文档中确切说明了它使用自己的动作过滤器解析程序。 请参阅“通过依赖关系注入提供过滤器”部分。

更新资料

首先注册过滤器提供程序:

var builder = new ContainerBuilder();
builder.RegisterWebApiFilterProvider(config);

然后像这样注册您的actionfilter:

builder.Register(c => new myHeaderAttribute())
.AsWebApiActionFilterFor<YourController>(c => c.YourMethod(default(int)))
.InstancePerApiRequest();

如此完整的代码:

var builder = new ContainerBuilder();
builder.RegisterWebApiFilterProvider(config);
builder.Register(c => new myHeaderAttribute())
.AsWebApiActionFilterFor<YourController>(c => c.YourMethod(default(int)))
.InstancePerApiRequest();

在文档中就可以了。 如果您有任何具体问题,可以单独询问。 但这变得太广泛了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM