c# - 从旧 URL 重定向到最新已知 URL 的巧妙方法

标签 c# javascript asp.net iis-8 redirect

我有一个网站,该网站大量使用 JavaScript 并与 .NET C# RPC 服务通信。我们遇到了客户端浏览器缓存 javascript 的问题,因此我们最终决定将版本号附加到 URL,以强制他们使用最新的 javascript,从而解决缓存问题。因此,对于每个新版本,我们都必须使用新的虚拟路径在 IIS 中创建一个新的应用程序/虚拟文件夹。例如:

http://example.com/websiteVersion10

我们的根目录有一个 C# Web 应用程序,它将请求从基本 URL 重定向到正确的最新版本,因此如果有人输入 http://example.com ,他们将被重定向到 http://example.com/latestwebsiteversion 。该应用程序使用自定义 XML 配置文件来读取最新版本,我们会在每个版本中更新该版本。

但是,我们发现客户端会将完整的“重定向到”URL 添加为书签,而不是键入 http://example.com当 URL 由于我们发布了新版本而过时时,它们将开始收到 404 错误页面,除非我们在 IIS 中保留旧的虚拟路径。

现在避免这种情况的一种方法是在 IIS 中保留所有旧的虚拟路径,并在每个过时的网站中放置一个重定向页面以重定向到最新版本,但我们确实经常发布,所以我知道我们最终会产生大量虚拟路径和物理文件夹很快就会过时。

我尝试使用自定义 404 错误页面从那里重定向回最新版本,如下所示:

if(OLD_URLs){
    Response.StatusCode = 200;
    Response.Redirect(LATEST_URL);
}

但这不起作用,而是显示空白页面。

是否有比在 IIS 中维护所有旧虚拟路径更简洁的解决方案来实现此目的?

最佳答案

如果我理解正确的话,您正在创建虚拟目录以确保提供最新的 javascript 文件?

您应该知道,通过将新的查询字符串变量附加到脚本引用的每个新版本,您将执行缓存清除,浏览器将下载最新版本:

<script type="text/javascript" src="myscript.js?v=1"></script>

如果您更新查询字符串变量,myscript.js 将再次重新下载,无论缓存中有什么:

<script type="text/javascript" src="myscript.js?v=2"></script>

根据您使用的 ASP.Net 版本,您在利用 bundle 时可以免费获得此版本。捆绑所有 CSS 和脚本,将站点设置为 Release模式,ASP.Net 会将缓存清除查询字符串附加到您的引用中。

引用:http://www.dotnet-tricks.com/Tutorial/mvc/c72b040113-Asp.net-MVC-4-performance-optimization-with-bundling-and-minification.html

关于c# - 从旧 URL 重定向到最新已知 URL 的巧妙方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21479962/

相关文章:

c# - Messagebox 是类还是对象?

c# - double 格式 - 显示零位或两位小数

c# - 在 TreeView 中获取所有选中节点及其子节点的列表

javascript - 如何在成功回调函数中获取$.ajax()请求参数?

c# - ASP.NET MVC 5 中的路由可选参数

javascript - 如何在执行内联编辑时显示包含数据表中的值的下拉列表?

c# - 在 Visual Studio 中 Hook 构建过程

javascript - 服务器重定向到下载文件后捕获重新加载/结束请求事件

javascript - Material UI 如何设置网格元素垂直跨3行?

asp.net - 有人可以解释一下 VistaDB 吗?