代码之家  ›  专栏  ›  技术社区  ›  Yucel

运行一次请求,哪里是最好的地方?

  •  2
  • Yucel  · 技术社区  · 14 年前

    嗨,我有一些代码需要运行1次才能请求。我有一个基本控制器,所有的控制器都是从它派生出来的。我将代码写入BaseControllerOnActionExecuting方法,但这并不好,因为每个操作的执行代码都在运行。我可以用一个基本的if子句来表示它,但我不想这样使用它。

    对于一个请求,运行代码1的最佳位置是什么?我还想访问编写此代码的httpcontext。谢谢

    1 回复  |  直到 14 年前
        1
  •  6
  •   Darin Dimitrov    14 年前

    在您对子操作的注释之后,您可以测试当前操作是否是子操作并且不执行代码。所以您可以有一个自定义的操作过滤器:

    public class CustomFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            // this method happens before calling the action method
    
            if (!filterContext.IsChildAction)
            {
                // this is not the a child action => do the processing
            }
            base.OnActionExecuting(filterContext);
        }
    }
    

    然后用这个自定义属性修饰您的基础控制器。类似的测试可以在重写的 OnActionExecuting 基本控制器的方法,如果您喜欢它而不是操作属性:

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.IsChildAction)
        {
            // this is not the a child action => do the processing
        }
        base.OnActionExecuting(filterContext);
    }