Asp.net 按要求运行一次最佳位置在哪里?

Asp.net 按要求运行一次最佳位置在哪里?,asp.net,asp.net-mvc,Asp.net,Asp.net Mvc,嗨,我有一些代码需要运行一次请求。我有一个BaseController,所有控制器都是从它派生的。我将代码写入BaseController onActionExecuting方法,但这并不好,因为对于每个操作,执行代码都在运行。我可以用一个基本的if子句来解释它,但我不想这样使用它 对请求运行代码1次的最佳位置是什么。我还想了解编写此代码的HttpContext。谢谢在您对子操作发表评论后,您可以测试当前操作是否为子操作,并且不执行代码。因此,您可以使用自定义操作筛选器: public clas

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


对请求运行代码1次的最佳位置是什么。我还想了解编写此代码的HttpContext。谢谢

在您对子操作发表评论后,您可以测试当前操作是否为子操作,并且不执行代码。因此,您可以使用自定义操作筛选器:

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);
    }
}
然后使用此自定义属性装饰基础控制器。如果您喜欢基本控制器的重写方法而不是操作属性,则可以在基本控制器的重写方法中执行类似的测试:

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

在ASP.NET MVC中,控制器操作始终与HTTP请求关联。所以OnActionExecuting保证每个请求只执行一次代码。如果这不是你想要的,请进一步解释。这是真的,但对我来说不是。因为在我的视图中,我有很多Render.Action,所以当它到达Render.Action时,BaseController.OnActionExecuting会重新运行。第二个代码更好,我不想为我的所有操作添加属性,感谢您的解决方案。您不需要为所有操作添加属性。只需修饰基本控制器类,它将应用于所有操作和所有派生的控制器操作。有没有办法判断它是否是重定向?