【发布时间】:2017-06-18 09:16:57
【问题描述】:
尝试从 MenuHelperModel 构建菜单会导致 MvcSiteMap 构建 所有 我的控制器。这可能会对性能造成很大影响。
当我依靠 [Authorize] 为控制器设置安全性时,这是唯一的方法吗?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-4 mvcsitemapprovider asp.net-mvc-sitemap
尝试从 MenuHelperModel 构建菜单会导致 MvcSiteMap 构建 所有 我的控制器。这可能会对性能造成很大影响。
当我依靠 [Authorize] 为控制器设置安全性时,这是唯一的方法吗?
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-mvc-4 mvcsitemapprovider asp.net-mvc-sitemap
首先,constructors should be simple。如果在每个请求上创建控制器会减慢应用程序的速度,则表明构造函数正在做太多工作。无论如何,MVC 框架会为每个请求创建一个实例,因此这可能会比MvcSiteMapProvider 更慢。
也就是说,还有另一种选择。您可以使用角色属性/角色属性来设置与 AuthorizeAttribute 中相同的角色。这样做的缺点是:
您可以通过创建一个动态节点提供程序来解决第一个限制,该提供程序使用反射扫描您的应用程序并将来自 AuthorizeAttribute 的角色设置为相应节点的角色。此代码在每次缓存超时时仅运行一次,因此此时有一些反射可能不会导致性能问题。
【讨论】:
AuthorizeAttribute 来检查任何不是当前请求的安全性的人,Microsoft 没有先见之明 - 你别无选择,只能模拟一个 @ 987654324@ 表示 would be 请求的对象,它需要一个控制器实例(或复制我提到的整个安全方案)。