【问题标题】:Front End Versioning the ASP.Net MVCASP.Net MVC 的前端版本控制
【发布时间】:2016-11-17 09:57:08
【问题描述】:

我们有一个在 ASP.NET MVC 上运行的企业应用程序。我们最近开始改进应用程序的完整 UI。现在,当我说 UI 时,它不是简单的 CSS,我可以将其放在单独的文件夹中并动态加载。基本上,完整的导航结构、布局元素,现在都在改进。然而,整体代码(控制器、模型)与这里和那里的一些小改进几乎相同。现在,我们应该推出改进后的 UI,但同时也并行支持旧 UI。

目标是像appURL/v2/ 一样运行新的 UI,其余的视图 url 保持不变。

现在,我们的目标是不必将控制器、模型复制到另一个项目中。

那么,基于 URL 中版本的 /v2/ 标识符在应用程序中全局提供不同视图的最佳方法是什么?

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 razor versioning


    【解决方案1】:

    使用区域,您可以使用相同的控制器提供不同的视图。因此,您创建一个具有自己视图的“v2”区域,并将请求相应地路由到“v2”:

    routes.MapRoute(
        "v2_default",
        "v2/{controller}/{action}/{id}",
        new { area = "v2", controller = "Home", action = "Index", id = UrlParameter.Optional },
        namespaces: new string[] { "YourNamespace.Controllers" }
        );
    
    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { area = "", controller = "Home", action = "Index", id = UrlParameter.Optional },
        namespaces: new string[] { "YourNamespace.Controllers" }
        );
    

    使用这个结构,两个路由都会在同一个命名空间中寻找控制器。

    【讨论】:

    • 控制器和动作是相同的,但是我如何定义它需要从 v2 区域获取视图而不更改每个动作中的代码并为视图添加 if/else。
    • @Vikram 视图应根据路由值中的区域进行解析。因此,如果您通过/v2 请求操作,则应该访问Areas/v2/Views 目录以执行该操作。
    • 试过了,问题是它希望控制器和动作也定义在“/v2”区域。如果 v2 中没有控制器,则会引发 404 错误。有什么想法,我如何将通用控制器与 v2 区域视图混合在一起?
    • @Vikram 那么你可能需要在两条路由中添加namespaces: new string[] { "YourNamespace.Controllers" }。这个原理应该可以,但是我目前无法测试细节。
    猜你喜欢
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多