Как автоматически прогреть каждый маршрут в приложении MVC.NET? - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь создать автоматизированную процедуру разминки для своего веб-сайта MVC 5, который размещен в Azure, чтобы ускорить первое обращение к каждой странице, на которой есть HttpGet.

Пока что янастроить прекомпиляцию, настроить applicationInitialization, но мне не нужно вручную поддерживать раздел applicationInitialization на веб-сайте каждый раз, когда страница добавляется / удаляется / переименовывается.

У меня есть идея создать отдельную«WarmupController», чей метод индекса определит все допустимые ActionResults на веб-сайте и сделает для них http-вызов, чтобы автоматически согреть их.Тогда у меня будет только одна запись в разделе applicationInitialization, которая будет вызываться для разогрева сайта.

Я близок, однако не могу определить URL страницы, когда контроллер находится вплощадь.Вот как я сейчас получаю все ActionResults:

   Assembly asm = Assembly.GetExecutingAssembly();

            var typeList = asm.GetTypes()
                    .Where(type => typeof(Controller).IsAssignableFrom(type))
                    .SelectMany(type => type.GetMethods(BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.Public))
                    .Where(m => !m.GetCustomAttributes(typeof(System.Runtime.CompilerServices.CompilerGeneratedAttribute), true).Any())
                    .OrderBy(d => d.DeclaringType.Name).ThenBy(d => d.Name).ToList();

Оттуда я могу упростить список до следующего:

var pageList = typeList.Select(x => new
                {
                    Controller = x.DeclaringType.Name,
                    Action = x.Name,
                    FullName = x.DeclaringType.FullName,
                    Url = Request.Url.GetLeftPart(UriPartial.Authority) + "/glthome/" + x.DeclaringType.Name.Replace("Controller", "") + "/" + x.Name
                }).Where(d => d.Controller != "WarmupController").Distinct().ToList();

Генерируемое свойство URL близко, но нене включайте название области.Я не вижу ничего очевидного в "typeList", который сказал бы мне "ах, это название области" для генерации URL.

Может кто-нибудь дать мне совет о том, как создать последовательный и надежныйURL для каждой страницы сайта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...