1

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

4

1 回答 1

2

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

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

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

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

于 2017-02-01T16:42:55.730 回答