MvcSiteMap 导致我所有的控制器实例化

MvcSiteMap causes all my controllers to instantiate

尝试从 MenuHelperModel 构建菜单会导致 MvcSiteMap 构建 all 我的控制器。这可能是一个很大的性能打击。 当我依靠 [Authorize] 为控制器设置安全性时,这是唯一的方法吗?

首先,constructors should be simple。如果在每个请求上创建控制器会降低应用程序的速度,则表明您的构造函数正在做太多工作。无论如何,MVC 框架为每个请求创建一个实例,因此这可能会减慢速度,而不仅仅是 MvcSiteMapProvider.

也就是说,还有另一种选择。您可以使用角色 attribute/Roles 属性 来设置与 AuthorizeAttribute 中相同的角色。这样做的缺点是:

  1. 您必须复制整个安全方案。
  2. 您将无法使用自定义 AuthorizeAttribute。

您可以创建一个动态节点提供程序来解决第一个限制,该提供程序使用反射扫描您的应用程序并将 AuthorizeAttribute 中的角色设置为相应节点的角色。此代码每次缓存超时仅 运行 一次,因此此时进行一些反射可能不会导致性能问题。