首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用asp.net mvc操作筛选器AttributeUsage的奇怪行为

使用asp.net mvc操作筛选器AttributeUsage的奇怪行为
EN

Stack Overflow用户
提问于 2011-07-18 11:23:49
回答 2查看 4.3K关注 0票数 13

我有一个具有以下签名的动作筛选器

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class UnitOfWorkAttribute : ActionFilterAttribute

根据MSDN:

-- AllowMultiple属性指示属性的多个实例是否可以存在于元素上。如果设置为true,则允许多个实例;如果设置为false (默认值),则只允许一个实例。

在MVC中,这种行为似乎有点奇怪。当我用这个属性修饰一个操作时,我发现过滤器的OnActionExecuting方法被执行了两次。

过滤器只在操作上声明,而不是在控制器上声明,我已经清除了所有全局过滤器。有人能解释一下这种行为吗?

EN

回答 2

Stack Overflow用户

发布于 2011-12-09 07:56:47

我也遇到了同样的问题。(我安装了一个全局过滤器(仅一次),发现它的IActionFilterIResultFilter方法对每个请求调用了两次。传递给这些方法的filterContext.HttpContext对象对于两个调用都完全相同。)

这是由于在视图中使用了Html.Action。(从调用堆栈的角度来看),调用Html.Action似乎重新处理了子操作方法(在初始操作方法的处理过程中),并为这两个方法调用了过滤器。

您可以通过检查filterContext.IsChildAction属性来检测这种情况。

票数 32
EN

Stack Overflow用户

发布于 2012-07-01 17:38:00

我也让来自自定义操作过滤器类的OnActionExecuting方法执行了两次。

在某种程度上,我将其添加到global.asax.cs文件中的global.asax.cs方法中:

代码语言:javascript
复制
GlobalConfiguration.Configuration.Filters.Add(new MyCustomActionFilter());

显然,我的动作过滤器已经添加到Filters集合中,这将导致对OnActionExecutingOnActionExecuted的双重调用。因此,不需要applicaton_start中的这一行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6732149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档