强制执行MVC RouteConfig?

时间:2019-06-11 15:45:13

标签: c# asp.net-mvc azure routing canonical-link

在我的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();仅包含在生产广告位中?

1 个答案:

答案 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

希望有帮助。