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

时间:2017-02-01 15:02:05

标签: asp.net asp.net-mvc asp.net-mvc-4 mvcsitemapprovider asp.net-mvc-sitemap

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

1 个答案:

答案 0 :(得分:2)

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

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

  1. 您必须复制整个安全方案。
  2. 您将无法使用自定义AuthorizeAttribute。
  3. 您可以通过创建使用Reflection扫描应用程序的动态节点提供程序并将AuthorizeAttribute中的角色设置为相应节点的角色来解决第一个限制。此代码仅在每个缓存超时时运行一次,因此在此时使用一些Reflection可能不会导致性能问题。