首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >强制执行MVC RouteConfig?

强制执行MVC RouteConfig?
EN

Stack Overflow用户
提问于 2019-06-11 23:45:13
回答 1查看 96关注 0票数 0

在我的www网站中,我在RouteConfig.cs文件中有代码来强制ASP.NET包含"www":

代码语言:javascript
复制
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();仅包含在生产插槽中?

EN

回答 1

Stack Overflow用户

发布于 2019-06-12 16:41:56

我建议你在这个场景中使用应用程序初始化模块,在这个场景中你可以调用你的函数来添加routes.Canonicalize().Www()。应用程序初始化模块已经实现,可以在部署插槽之间交换内容时使用。此模块还针对所有其他操作(例如自动缩放、手动缩放或Azure fabric维护)进行了实现,其中提供了新的worker。也就是说,您可以在应用程序可用之前主动执行初始化任务。

为了启用上述模块,您需要创建一个applicationInitialization部分,您将在其中定义初始化任务开始时要命中的url。您还可以选择指定用于预热请求的hostName,这可能对调试和监视非常有帮助。如果没有指定,将使用“localhost”作为主机名。

代码语言:javascript
复制
<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

希望能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56547371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档