这与源的版本控制无关。这是业务的要求以及它与各种供应商的接口,因此我正在尝试以最佳方式设置它。基本上我们需要提供网站的不同主要版本,具体取决于谁在点击它 - 而不在URL中显示该版本。以下是它现在的工作原理:
该站点是在IIS 7上运行的ASP.NET MVC 4.现在,它在IIS中设置了一个默认站点,下面是应用程序。每个应用程序都是该站点的一个版本。当初始请求到达站点时,它将通过自定义ISAPI筛选器运行。该过滤器从URL中获取本质上是用户ID变量的内容,并使用它来查询SQL数据库。此数据库将用户标识链接到需要提供的版本(IIS中的应用程序),并将其附加到URL的开头。因此http://site.com/1
变为http://site.com/2.1.0.0/1
,从而指向IIS中的正确目录。然后在站点内,自定义HtmlHelpers用于在创建锚链接或按钮等时从URL字符串中剥离版本。当用户点击其中一个链接时,它会重复。
这似乎不必要地复杂化。我不想使用自定义HtmlHelpers,只是默默地将请求重定向到IIS中的其他虚拟目录/物理路径。
对于替代方案,我们已经看过:
HttpContext.RewritePath()
的自定义HttpModule,但遇到了MVC路由和HtmlHelpers的问题,就好像没有HttpModule做任何事情一样。我没有代码可以分享,真的 - 它是专有的。我正在寻找的是更多的理论。如何建立这样一个疯狂的网站版本控制装置?
答案 0 :(得分:0)
经过更多的比赛后,我们找到了答案。 Garath上述评论的问题在于,虽然出站规则可以重写Html.ActionLink
和Html.BeginForm
,但他们无法对RedirectToRoute
或RedirectToAction
执行任何操作。出站规则仅解析生成的HTML内容并在将其发送回浏览器之前进行更改。出站规则也与gzip不兼容,这是可以理解但很烦人的。
简而言之,我们创建了一个自定义重写提供程序,它使用SQL连接来提取版本并返回正确的URL。我们还连接到IIS URL重写功能,以发送自定义服务器变量,以防止每个会话多次查询数据库。它的工作原理如下:
帮助我们的链接:
希望将来可以帮助其他人。
附注 - 自定义重写提供程序必须以.NET 2.0为目标,这不在上面的第一个链接中。