c# - 强制 MVC RouteConfig 执行?
问题描述
在我的 ASP.NET MVC 网站中,我在RouteConfig.cs
文件中有代码强制 URL 包含“www”:
using Canonicalize;
using System.Configuration;
using System.Web.Routing;
namespace MyWebsite
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
if (ConfigurationManager.AppSettings["Production"] == "true")
{
routes.Canonicalize().Www();
}
}
}
}
我在 Azure 中托管我的网站,它有“部署槽”。我将代码推送到“暂存”插槽,进行测试,然后将“暂存”插槽与“生产”插槽“交换”。
在上面的代码中,您可以看到我有条件routes.Canonicalize().Www();
地仅包含生产槽。这是因为暂存槽使用的 URL 不允许“www”。
问题是文件中的代码似乎RouteConfig.cs
只在初始网站加载时触发。当我加载网站时,RouteConfig.cs
执行并routes.Canonicalize().Www();
正确排除。当我交换插槽时,RouteConfig.cs
代码似乎没有被重新执行,并且routes.Canonicalize().Www();
仍然被排除在外,这不是我想要的。
有没有一种方法可以可靠且准确地routes.Canonicalize().Www();
仅包含在生产槽中?
解决方案
我建议您在这种情况下使用应用程序初始化模块,您可以在其中调用函数来添加routes.Canonicalize().Www()
. 应用程序初始化模块已实现并可在您在部署槽之间交换内容时使用。此模块还针对预配新工作器的所有其他操作(例如自动缩放、手动缩放或 Azure 结构维护)实施。也就是说,您可以在应用程序可用之前主动执行初始化任务。
为了启用上述模块,您需要创建一个 applicationInitialization 部分,您应在其中定义要启动初始化任务的 url。您还可以选择指定用于热身请求的主机名,这可能对调试和监控目的非常有帮助。如果没有另外指定,“localhost”将用作主机名。
<system.webServer>
<applicationInitialization>
<add initializationPage="/app/initialize" hostName="warmup-requests.domain.com"/>
</applicationInitialization>
<system.webServer>
按照上述,部署槽之间的交换操作将在“app/initialize” url下的代码执行后完成。
参考:
https://ruslany.net/2015/09/how-to-warm-up-azure-web-app-during-deployment-slots-swap/ https://feedback.azure.com/forums/169385-web-应用程序/建议/6972595-application-initialization-to-warm-up-specific-pag
希望能帮助到你。
推荐阅读
- javascript - jQuery UI multiple resizable divs not bigger than parent div
- javascript - 如何在后台下载PDF文件
- stocktwits - 是否有可能从 stocktwits 获得超过 30 条消息?
- git - git - 处理可能有冲突的多个拉取请求
- javascript - 在 Vue 应用程序上显示 RSS Feed 或 API
- redux - 如何在 React-Redux 中将 state sanitizer 与现有的中间件结合起来
- bash - 在终端 Mac OS X 中大量删除具有通用前缀的文件
- postgresql - PostgreSQL 需要行返回,即使结果为 0
- php - 在 Plesk 和 CentOS 下无法获取旧版本的 PHP 以使用 MySQL
- c# - WiX 在 CustomActionData 中转义 XPath 括号