【发布时间】:2016-10-04 23:37:42
【问题描述】:
我正在开发一个大型生产 SAAS Webforms 应用程序,该应用程序将慢慢迁移到 MVC 5。我们希望能够让一些客户“选择加入”新的 MVC 页面,因为它们是基于可配置的设置。
MVC 应用程序将与 webforms 应用程序在同一个项目中。向 MVC 的转换将逐个功能地进行,基本上创建一个完整的 MVC 应用程序,与 webforms 应用程序并列。在实现所有功能并且客户转换后,我们将删除 webforms 项目并仅保留 MVC 项目。
如果客户“选择加入”,那么我们希望他们查看现有的任何 MVC 视图,而不是原始 aspx 页面。如果一个 aspx 页面尚未转换为 MVC 或者他们的客户没有选择加入,那么我们希望他们查看该 aspx 页面。
我主要关心的是防止用户在应该查看 MVC 页面时手动输入 url 并转到 aspx 页面,反之亦然。由于这个应用程序是一个多租户系统,它不能只在路由配置中设置,因为它们只在整个应用程序启动时加载一次。无论哪种解决方案都需要动态检查每个用户的选择加入设置。
如果两者都存在,那么哪里是遵守“选择加入”设置以强制用户使用新的 MVC 路由而不是旧的 aspx 页面的最佳位置,以及实现此逻辑的最佳方法是什么?
几个同事提到可以使用 HTTPModule 来完成,该模块检查 aspx 页面集合到 MVC 路由映射。
基本上: 如果 optInToMvcSetting == true && url.contains(".aspx") 则重定向到aspxToRouteMap中找到的对应路由。
如果 optInToMvcSettings == false && !url.contains(".aspx") 则重定向到在 aspxToRouteMap 中找到的相应 aspx 页面。
有人有什么想法或建议吗?
【问题讨论】:
-
路由和授权是独立的关注点。路由用于定义 URL 的外观。您应该使用
[AuthorizeAttribute]授权用户使用您网站的某些部分。配置权限后,您可以使用this technique 显示/隐藏指向其他部分的链接。 -
如果用户只能看到与他们选择的网站版本相关的导航 - 旧版或 MVC - 我希望这足以支持您的大多数用户。为什么要阻止用户手动输入 URL,您真的希望他们这样做吗?
标签: c# asp.net-mvc webforms