这与源代码的版本控制无关。这是业务的要求以及它与各种供应商的交互方式,因此我正在尝试找出最好的方法来设置它。本质上,我们需要根据谁在访问站点来提供不同的主要版本的站点——而不是在 URL 中显示该版本。这是它现在的工作方式:
该站点是在 IIS 7 上运行的 ASP.NET MVC 4。现在它在 IIS 中设置了一个默认站点,下面有应用程序。每个应用程序都是站点的一个版本。当初始请求到达站点时,它会通过自定义 ISAPI 过滤器运行。该过滤器从 URL 中获取本质上是用户 ID 变量的内容,并使用它来查询 SQL 数据库。该数据库将用户 ID 链接到需要服务的版本(IIS 中的应用程序),并将其附加到 URL 的开头。所以http://site.com/1
变成http://site.com/2.1.0.0/1
,从而指向 IIS 中的正确目录。然后在站点内,自定义 HtmlHelpers 用于在创建锚链接或按钮等时从 URL 字符串中删除版本。当用户单击其中一个链接时,它会重复。
这似乎不必要地复杂。我不想使用自定义 HtmlHelpers,而只是默默地将请求重定向到 IIS 中的不同虚拟目录/物理路径。
对于替代方案,我们研究了:
- 在 IIS 中使用 URL 重写 - 但这需要在初始请求时输入版本,而最终用户不会知道这一点。
- 使用自定义 HttpHandler - 但这需要已经访问网站 - 请求已经很好地进入 IIS。可能是我不太了解使其发挥作用。
- 尝试不重写 URL,而只是使用 ISAPI 过滤器重写虚拟目录/物理路径,但似乎没有任何钩子可以用来这样做。
- 创建一个调用
HttpContext.RewritePath()
但遇到 MVC 路由和 HtmlHelpers 问题的自定义 HttpModule,就像没有 HttpModule 做任何事情一样。
我没有要分享的代码,真的 - 它是专有的。我正在寻找更多的理论。如何设置如此疯狂的网站版本控制装置?