【问题标题】:routing legacy webforms urls to mvc controller/actions?将旧版 Web 表单 url 路由到 mvc 控制器/操作?
【发布时间】:2015-11-18 14:07:24
【问题描述】:

我们计划将旧版 Web 表单逐步转换为 MVC。 (并一路学习 MVC!)

我想知道路由是否是一种适当的方式,有效地用控制器/操作一次替换旧的 Web 表单页面。现在我们有了这个,它是在创建 MVC 区域并使用 nuget 将 MVC 添加到项目时为我们生成的:

Public Overrides Sub RegisterArea(ByVal context As AreaRegistrationContext)
    context.MapRoute(
        "MVC_default",
        "MVC/{controller}/{action}/{id}",
        New With {.action = "Index", .id = UrlParameter.Optional}
    )
End Sub

所以控制器 "foo" 与动作 "bar" 是通过 url ".../AppName/MVC/foo/bar" 引用的,而 aspx 页面是通过 ".../AppName/Pages/PageName" 中的 url 访问的”。

我可以在 App_Start 的 RouteConfig.vb 中使用额外的 MapRoute() 调用,或者 MapPageRoute() 来专门将各个页面映射到相应的新 MVC 控制器/动作吗?那会是什么样子?

这将让我们避免在构建导航 url 时触及 web 表单端的杂乱代码。

【问题讨论】:

    标签: asp.net asp.net-mvc webforms asp.net-mvc-routing


    【解决方案1】:

    如果您使用的是 IIS,则可以使用 IIS Rewrite rules 将 MVC 路由伪装成 WebForms 或经典 ASP URL。您不必更改任何可能漂浮在那里的旧链接,您可以保留旧的 WebForms 页面,并通过切换重写规则在 MVC/WebForms/Classic ASP 之间切换(无需重新部署站点)。

    您可以在重定向或重写之间进行选择,具体取决于您是否希望客户端看到新的 MVC URL。

    这是一个经典 ASP -> web.config 中的 MVC 重写规则的示例:

    <rule name="AppPageRewrite" enabled="true" stopProcessing="true">
      <match url="app.asp" />
      <action type="Rewrite" url="/app" appendQueryString="true" />
    </rule>
    

    顺便说一句,根据我的经验,将 Web 表单/经典 ASP 站点逐步转换为 MVC(在每页,甚至是子页面级别)已被证明非常有效(在敏捷/Scrum 环境中效果特别好)。

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 2013-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多