gpt4 book ai didi

ASP.NET ActionFilters 和继承

转载 作者:行者123 更新时间:2023-12-04 06:49:58 25 4
gpt4 key购买 nike

我所有的 Controller 都继承自具有 ActionFilter 属性的 BaseController:

[AnalyticsData]
public class BaseController : Controller {}

public class AccountController : BaseController {}

我的 Controller 中的一些操作重用了 AnalyticsData ActionFilter:
public class AccountController : BaseController
{
[AnalyticsData(Page="AccountProfile")]
public ActionResult Profile()
{
// return View
}
}

我注意到 AnalyticsData ActionFilter 只运行一次。这是一件好事,我只希望它运行一次,但我想知道这是怎么发生的。如果我在 OnActionExecuting 中设置断点:
public class AnalyticsAttribute : ActionFilterAttribute 
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// break point set here
}
}

...当 AccountController 为其提供 Profile View 时,它只会被击中一次。

ActionFilters 和/或属性如何工作,使 Action 上的 [AnalyticsData(Page="AccountProfile")] 覆盖/替换 BaseController 上的 [AnalyticsData]?

最佳答案

简短的回答是,检索每个 Action 的过滤器列表的 ASP.NET MVC 框架代码以这样一种方式删除重复项(相同类型的 Action 过滤器),它更喜欢在 Action 方法上定义的 Action 过滤器而不是在 Controller 上定义的 Action 过滤器(或其基类)。在 MVC 2 中,此逻辑在 ActionDescriptor 类中的一些内部方法中执行

关于ASP.NET ActionFilters 和继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3268370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com