autofac nuget update更改IAutofacActionFilter实现

时间:2016-09-17 11:45:54

标签: c# .net asp.net-web-api autofac

我有一个asp.net web api2项目,我需要在响应头中添加某些P3P值并使用有效的ActionFilterAttribute实现..

在我的开发环境中,我尝试实现Autofac 3.5.2及其web api集成模块3.4。

文档提到了使用IAutofacActionFilter实现,我尝试使用它们。

以下是代码..

public void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
    if (actionExecutedContext.Response != null)
        actionExecutedContext.Response.Headers.Add("P3P", 
            "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\"");
}

public void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{    
}

在我的Dependencies.config中,我添加了..

builder.Register(c => new myActionFilter())
    .AsWebApiActionFilterFor<DefaultController>(c => c.myaction(default(myclass)))
    .InstancePerRequest();

因为myaction是async ..,c.myaction(默认值(myclass))发出警告“因为没有等待此调用,所以当前方法的执行在调用完成之前继续。考虑将'await'运算符应用于电话结果。“

应用程序似乎有效,但由于我无法摆脱警告,我决定不在那时实施Autofac。

最近,我们获得了在项目中使用Autofac的授权,今天当我打开应用程序并更新nuget软件包时,我发现Autofac已经更新到ver 4.1.0和web api集成模块到4.0.0。 / p>

现在,自Autofac 4.0.0起,Autofac过滤器接口现在使用基于任务/异步的方法签名而不是同步签名。

不幸的是,Autofac文档(http://docs.autofac.org/en/latest/integration/webapi.html)仍然显示旧样式的代码,但尚未更新。

如果知道新风格的人可以让我知道如何将旧代码更改为新代码,我将非常感谢。

由于

1 个答案:

答案 0 :(得分:0)

您应该将myActionFilter课程重构为以下内容:

public Task OnActionExecutedAsync(HttpActionExecutedContext actionExecutedContext, 
    CancellationToken cancellationToken)
{
    if (actionExecutedContext.Response != null)
        actionExecutedContext.Response.Headers.Add("P3P",
            "CP=\\\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\\\"");

    return Task.FromResult(0);
}

public Task OnActionExecutingAsync(HttpActionContext actionContext,
    CancellationToken cancellationToken)
{
    return Task.FromResult(0);
}