我有一个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)仍然显示旧样式的代码,但尚未更新。
如果知道新风格的人可以让我知道如何将旧代码更改为新代码,我将非常感谢。
由于
答案 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);
}