【问题标题】:Use setting to choose Webforms url or MVC route使用设置选择 Webforms url 或 MVC 路由
【发布时间】: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


【解决方案1】:

为什么不同时使用?

保持 WebForms aspx 页面不变,然后在转换功能时添加 MVC 路由。

然后您可以简单地维护两个单独的导航渲染,一个用于 WebForms,一个用于 MVC。默认情况下显示 WebForms,但如果用户选择加入,则显示 MVC。浏览器 cookie 足以提供此功能。

MVC 导航最初将包含 aspx 链接,但随着转换的进行,这些链接将被替换为对应的 MVC。

MVC 路由足够智能,可以区分 MVC 路由或 aspx 页面。

This question 包含有关您的问题的信息。

【讨论】:

  • 所有好的建议,@timothyclifford,但它并不能完全解决我想要问的问题。我在描述中添加了更多信息,以帮助阐明我想要做什么。
  • 谢谢。在上面添加了评论。
猜你喜欢
  • 2012-12-11
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
  • 2012-03-19
  • 2010-10-24
  • 1970-01-01
  • 1970-01-01
  • 2013-01-19
相关资源
最近更新 更多