【发布时间】:2013-08-28 10:33:01
【问题描述】:
我的 WebApi 过滤方法 OnActionExecuted 被调用了两次。
我的过滤器(我让它尽可能简单):
public class NHibernateActionFilter : ActionFilterAttribute
{
// [Inject]
// public ISessionFactoryProvider sessionFactoryProvider { get; set; }
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
var a = 5;
var b = a;
//new BaseSessionProvider(sessionFactoryProvider).EndContextSession();
}
}
我的设置:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
//http://stackoverflow.com/questions/9521040/how-to-add-global-asp-net-web-api-filters
FilterConfig.RegisterWebApiFilters(GlobalConfiguration.Configuration.Filters);
}
public class FilterConfig
{
public static void RegisterWebApiFilters(System.Web.Http.Filters.HttpFilterCollection filters)
{
filters.Add(new NHibernateActionFilter());
}
}
在调试器中,我用相同的actionExecutedContext 两次捕获OnActionExecuted。为什么?
UPD
Controller
public class BankSmsController : ApiController
{
[AcceptVerbs(HttpVerbs.Get)]
public int GetTest()
{
return 1;
}
}
【问题讨论】:
-
我注意到一个
Inject属性被注释掉了——是否有一些 NInject 配置也设置了过滤器,所以它被添加了两次?是否确认在所有启动代码运行完毕后,全局过滤器集合中只有一个过滤器实例? -
根本没有ninject。我删除
kernel.BindFilter<NHibernateActionFilter>(FilterScope.Global, 1); -
你能展示一下控制器吗?
-
您的控制器和全局过滤器中可能直接有
[NHibernateActionFilter]。因此它被执行了两次。 -
我连接了我的控制器。它没有属性或动作
标签: asp.net-mvc asp.net-web-api action-filter