2016-09-17 80 views
0

我有地方,我需要在响应头添加某些P3P值和使用ActionFilterAttribute实现其制定一个asp.net网站API2项目..autofac的NuGet更新改变IAutofacActionFilter实施

在我的开发环境我想实现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是异步..,c.myaction(默认值(MyClass的) )抛出警告“因为这个调用没有被等待,所以在调用完成之前继续执行当前方法。考虑在调用结果中应用'await'操作符。”

该应用程序似乎工作,但由于我无法摆脱警告,我决定不在当时实施Autofac。

最近,我们获得了在项目中使用Autofac的权限,今天当我打开应用程序并更新Nuget软件包时,发现Autofac已更新至4.1.0版本,并且已将web api集成模块更新至4.0.0。

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

不幸的Autofac文档(http://docs.autofac.org/en/latest/integration/webapi.html)仍然显示旧的代码风格,并没有更新。

如果有人知道这种新风格,可以让我知道如何将旧代码更改为新代码,我将衷心感谢。

感谢

回答

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); 
} 
+0

没有我dependencies.config源保持不变.. – Arnab