【问题标题】:ASP.NET MVC 4.0 GolbalFilter for page request用于页面请求的 ASP.NET MVC 4.0 GobalFilter
【发布时间】:2013-04-01 04:09:36
【问题描述】:

我想在我的 ASP.NET MVC 4.0 网站中捕获网站流量。 我已经这样做了

我的基本控制器:

 public class BlogActionFilterAttribute : ActionFilterAttribute
        {
            public override void OnResultExecuting(ResultExecutingContext filterContext)
            {
                base.OnResultExecuting(filterContext);
                BaseModels.StoreSessionData(filterContext);
            }
        }

Global.ASAX:

protected void Application_Start()
        {

            // Register global filter
            GlobalFilters.Filters.Add(new BaseController.SiteActionFilterAttribute());
}

到目前为止,一切都很好。

如果我的操作视图有任何渲染操作或操作助手,那么我的会话事件正在我的数据库中存储另一条新记录,这是因为我的全局过滤器适用于 ActionFilterAttribute

如果一个页面请求有多个动作,那么我的会话事件会将所有这些动作捕获为事件。

如何限制我的过滤器只处理每页请求而不是操作及其子操作?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing action-filter


    【解决方案1】:

    如果我理解正确,您希望限制您为其存储会话数据的操作类型。我假设您要限制的一种类型是 ChildActions。如果是这样,你会怎么做”

     public class BlogActionFilterAttribute : ActionFilterAttribute
            {
                public override void OnResultExecuting(ResultExecutingContext filterContext)
                {
                    base.OnResultExecuting(filterContext);
                    if (!filterContext.IsChildAction)
                        BaseModels.StoreSessionData(filterContext);
                }
            }
    

    【讨论】:

    • 我认为需要将该方法标记为子操作,不是吗?
    • @MystereMan,是的,确实如此。有没有更确定的方法?
    • @MystereMan 同样的问题,有没有更明确的方法?即使我没有使用子动作属性。
    • 从我检查的所有内容来看,似乎没有其他方法存在
    • 您的回答帮助我接近了我想要的。所以我正在标记你的答案。谢谢。
    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    相关资源
    最近更新 更多