Принудительно выполнить выполнение MVC RouteConfig? - PullRequest
0 голосов
/ 11 июня 2019

На моем веб-сайте 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 выполняется, а routes.Canonicalize().Www(); корректно исключается.Когда я меняю слоты, код RouteConfig.cs, кажется, не выполняется повторно, и routes.Canonicalize().Www(); остается исключенным, что не то, что я хочу.

Есть ли способ, которым я могу надежно и точно иметьroutes.Canonicalize().Www(); включен только для производственного слота?

1 Ответ

0 голосов
/ 12 июня 2019

Я бы предложил вам использовать модуль инициализации приложения в этом сценарии, где вы можете вызвать функцию для добавления routes.Canonicalize().Www(). Модуль инициализации приложения был реализован и доступен для использования при обмене контентом между слотами развертывания. Этот модуль также был реализован в отношении всех других операций, в которых предоставляется новый работник (например, автоматическое масштабирование, ручное масштабирование или обслуживание фабрики Azure). А именно, вы можете активно выполнять задачи инициализации до того, как ваше приложение станет доступным.

Чтобы включить указанный модуль, вам нужно создать раздел applicationInitialization, в котором вы должны определить URL-адрес, по которому будет выполняться запуск задачи инициализации. У вас также есть возможность указать имя хоста, которое будет использоваться для запросов на разогрев, что может оказаться очень полезным для целей отладки и мониторинга. Если не указано иное, в качестве имени хоста будет использоваться «localhost».

<system.webServer>  
  <applicationInitialization>  
    <add initializationPage="/app/initialize" hostName="warmup-requests.domain.com"/>  
  </applicationInitialization>  
<system.webServer>

В соответствии с вышеизложенным, операция обмена между слотами развертывания будет завершена после выполнения кода под URL-адресом «app / initialize».

Ссылка:

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

Надеюсь, это поможет.

...