Маршрутизация .NET Webforms работает на локальном хосте, но не на IIS 8 - PullRequest
1 голос
/ 05 ноября 2019

Я создаю приложение для веб-форм .NET и впервые пытаюсь использовать удобные URL-адреса. Приложение ориентировано на фреймворк 4.7.1. Все легко и прекрасно работает на localhost. Когда я развертываю его на тестовом сервере (который работает под управлением IIS версии 8.5.9600.16384), я получаю странные результаты. Страница будет правильно маршрутизироваться и сохранит дружественную структуру URL, если routeUrl равен физическому имени страницы, но если routeUrl не равен, это дает 404. Даже когда маршрут работает, значения маршрута неперейти на страницу. Page.RouteData.Values.Count всегда возвращается как 0, даже когда я устанавливаю значение по умолчанию.

Я просмотрел переполнение стека и весь остальной интернет и посмотрел, даже не смотрюзнаю, сколько сообщений от людей с похожими проблемами, но в тех немногих случаях, когда были предложены решения, ни один из них не работал для меня. Ниже приведены вещи, которые я изменил в своей веб-конфигурации на основе этих предложений, но все безрезультатно.

Что у меня сейчас есть:

RouteConfig.cs

    public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {

            routes.MapPageRoute( //"works", but no route values when navigate to /giftcard/something
                "new-giftcard",
                "giftcard/{action}",
                "~/giftcard.aspx",false, new RouteValueDictionary { { "action", "add" } });

            routes.MapPageRoute( //returns 404 when navigate to /random/something
                "randomtest",
                "random/{action}",
                "~/giftcard.aspx", false, new RouteValueDictionary { { "action", "test" } });

            var settings = new FriendlyUrlSettings();
            settings.AutoRedirectMode = RedirectMode.Permanent;
            routes.EnableFriendlyUrls(settings);
        }
    }

Global.asax

        void Application_Start(object sender, EventArgs e)
        {
            RouteConfig.RegisterRoutes(RouteTable.Routes);

        }

Web.config (вещи, которые я добавил, основываясь на исследовании возможных проблем, ни одна из которых не помогла)

 <system.webServer>
    <modules  runAllManagedModulesForAllRequests="true"  >
      <remove name="UrlRoutingModule-4.0" />
      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
    </modules>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

Все это прекрасно работает на localhost,Поскольку все это работает локально, должно быть что-то не так с тем, как IIS обрабатывает маршрутизацию, но я здесь не в своей области знаний, поэтому любые другие идеи о том, что нужно изменить или как отладить, будут хорошими.

Вот мои текущие настройки на работающем сервере снова для справки:

IIS версия 8

Пул приложений .NET 4.0 Integrated

Целевая платформа .NET 4.7.1

Я проверил IIS Express на своей локальной машине разработки, и это версия 10.

РЕДАКТИРОВАТЬ: дополнительная информация - я попробовал его на новом тестовом сервере с новой установкой сервера 2012,и это похоже на работу. В отличие от тестового сервера, описанного выше, на этом новом сервере была установлена ​​ТОЛЬКО версия .NET 4.0. Первый сервер старше, и на нем установлены .NET 3.5 и 4. Возможно конфликт с версиями .NET?

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