2016-09-17 77 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