在我的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();
仅包含在生产广告位中?
答案 0 :(得分:0)
我建议您在这种情况下使用应用程序初始化模块,在此情况下,您可以调用函数来添加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-apps/suggestions/6972595-application-initialization-to-warm-up-specific-pag
希望有帮助。