ActionDescriptor from ControllerContext
本文关键字:ControllerContext from ActionDescriptor | 更新日期: 2023-09-27 18:35:43
鉴于我只能访问ControllerContext
而不能Action____Contexts
获取当前正在执行的ActionDescriptor的最佳方法是什么?
到目前为止,我找到的唯一方法是:
new ReflectedControllerDescriptor(context.Controller.GetType())
.FindAction(context, context.RouteData.GetRequiredString("action"));
这是最佳方法吗?
类被命名为ReflectedControllerDescriptor
的事实让我想知道此操作是否有沉重的成本,因为它将在每个页面请求上执行?与此相关的是,这个类是内部缓存还是我实际上应该显式缓存ReflectedControllerDescriptors
?
对 MVC 源代码进行一些挖掘,这几乎是最佳方法,而无需复制执行您已经在做的事情所需的所有方法。但是,我不明白为什么您无法缓存找到的操作,以便后续调用的性能更高。
在内部,ReflectedControllerDescriptor
还会缓存结果,尽管似乎有一些开销,因为它每次都会检查所有属性。它看起来适用于诸如HttpPostAttribute
之类的东西。
我的建议是坚持使用您正在使用的内容,而不是自己缓存它。如果由于某种原因,基础方法的工作方式发生了变化,那么您已经是最新的,并且不必担心更改存储缓存项的方式。