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

ActionDescriptor from ControllerContext

对 MVC 源代码进行一些挖掘,这几乎是最佳方法,而无需复制执行您已经在做的事情所需的所有方法。但是,我不明白为什么您无法缓存找到的操作,以便后续调用的性能更高。

在内部,ReflectedControllerDescriptor 还会缓存结果,尽管似乎有一些开销,因为它每次都会检查所有属性。它看起来适用于诸如HttpPostAttribute之类的东西。

我的建议是坚持使用您正在使用的内容,而不是自己缓存它。如果由于某种原因,基础方法的工作方式发生了变化,那么您已经是最新的,并且不必担心更改存储缓存项的方式。

相关文章:
  • 没有找到相关文章