Asp.Net MVC Url.RouteUrl Проблема в Windows 2003 против Visual Studio 2008 - PullRequest
1 голос
/ 13 февраля 2009

Я вижу разницу в выводе Url.RouteUrl между моей машиной разработки и сервером развертывания. Я использую Visual Studio 2008, и мой блок развертывания - Windows 2003 Server. Я настроил Global.asax.cs для работы с расширением .aspx в моих таблицах маршрутизации. Однако когда я использую именованный маршрут "Search-Basic", из Url.RouteUrl не выводится ("Search-Basic", new {category = "Test", searchExpression = "search this"})

Посмотреть код:

<%= Url.RouteUrl("Search-Basic", new {category = "test", searchExpression="search this"}) %>

Global.asax.cs Код:

            // routes for IIS 6 and version below
        routes.MapRoute(
            "Search-Basic",
            "Search.aspx/Basic/{category}",
            new { controller = "Search", action = "Basic", category = "All" }
            );

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}.aspx/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

        routes.MapRoute(
            "Root",
            "",
            new { controller = "Home", action = "Index", id = "" }
        );

В моем окне разработки я получаю ожидаемый результат: /Search.aspx/Basic/Test?searchExpression=search%20this

Однако на моем сервере развертывания я вообще ничего не получаю. Возможно, одно отличие состоит в том, что я запускаю приложение в виртуальном каталоге на моем сервере развертывания; что-то вроде: http://testmachine.com/sm/testappname/, где "/ sm" - это виртуальный каталог, а "/ testappname" - это виртуальный каталог, содержащий мое приложение.

Есть идеи?

Спасибо, любезно.

Ответы [ 2 ]

1 голос
/ 14 февраля 2009

Используете ли вы ту же версию ASP.NET MVC, потому что есть ошибка в RC1 (без обновления), которая вызывает это поведение, когда у вас есть маршрут, где, например, контроллер не указан в маршруте:

Другая регрессия заключается в том, что в некоторых случаи, RouteUrl (и, таким образом, RouteLink) методы возвращают пустое строка при указании имени маршрута, но у маршрута есть параметры по умолчанию которые не являются параметрами в URL.

Например, если у вас есть следующее Маршрут:

routes.MapRoute("route-name", "foo/bar", new {controller="Home", action="index"});

Обратите внимание, что контроллер имеет значение по умолчанию значение, но не является частью URL. Если Затем вы указываете:

<%= Url.RouteUrl("route-name") %>

Вы можете ожидать, что он будет использовать этот маршрут для отображения URL, но это не делает. Эта ошибка была введена, когда мы рефакторинг всей нашей генерации URL помощники призвать в общий метод. Оказывается, однако, что наш Методы RouteUrl (иначе не MVC конкретный) должен иметь слегка разные поведение, чем специфические методы MVC (такой как Действие). Мы добавили флаг общий метод, так что это разница учитывается рассмотрение. Это было исправление, которое сделало не имеют большой площади поверхности.

См. http://haacked.com/archive/2009/01/30/aspnetmvc-refresh.aspx

0 голосов
/ 16 февраля 2009

Хорошо, я считаю, что сузил проблему до необычной конфигурации в IIS 6. Я задал вопрос здесь.

Оба предложения убедиться, что я обновился до версии Refresh RC1, и использовать отладку маршрутизации от Haack, привели меня на этот путь, поскольку оба устранили проблемы с версией и маршрутизацией.

...