ASP.NET MVC2 Routing IIS6 - работают только маршруты по умолчанию - PullRequest
0 голосов
/ 19 ноября 2010

Я развернул веб-сайт ASP.NET MVC2 на компьютере с Windows Server 2003 под управлением IIS 6. Я использую в основном стандартную маршрутизацию в стандартном проекте MVC:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Products", action = "List", id = UrlParameter.Optional } // Parameter defaults
        );

    }

Переход к http://localhost/MyApplication берет меня на страницу списка просто отлично.Переход к http://localhost/MyApplication/Products/Details/21 дает мне 404. Эта маршрутизация работала нормально на встроенном сервере разработки в VS2010.

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

Я бы очень хотел сохранить свои URL без расширений.Кто-нибудь имеет представление о том, почему маршрутизация будет работать для веб-страницы по умолчанию, но не для других?

* Редактировать: только что попытался добавить расширение .aspx, то есть теперь мой маршрут выглядит следующим образом:

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

И у него такое же поведение, за исключением того, что на этот раз я получаю страницу asp 404 вместо страницы html 404 ...

* Редактировать 2: повторить попытку, используя следующий маршрут и убедившись, что.mvc был сопоставлен с aspnet_isapi.dll:

        routes.MapRoute(
            "Default", // Route name
            "{controller}.mvc/{action}/{id}", // URL with parameters
            new { controller = "Downtime", action = "List", id = UrlParameter.Optional } // Parameter defaults
        );

На этот раз я получил «Internet Explorer не может отобразить веб-страницу» в стиле 404.Теперь у меня есть 3 разные ошибки 404 при использовании этих 3 разных методов ...

* Правка 3 Возврат правки: у меня сайт, работающий в IIS 5.1 на Windows XP professional, только с переназначением подстановочного знака навиртуальный каталог, но не дай бог, я смогу запустить его на веб-сервере ...

Ответы [ 2 ]

1 голос
/ 19 ноября 2010

Прежде всего, вы должны выполнить это пошаговое руководство: http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

(просто чтобы убедиться, что вы что-то не пропустили).Это показывает, как заставить работать версии без расширений и с расширением.Возможно, вы захотите хотя бы проверить, работает ли расширенная версия, чтобы убедиться, что другие вещи не настроены неправильно.

После этого, возможно, вам следует попробовать добавить что-то вроде этого ..

http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

... поскольку это действительно может помочь определить, где нарушены ваши маршруты.

Некоторые другие вещи, которые нужно проверить:

  • Является ли IISнастроен с ASP.NET?Проверьте свойства виртуального каталога.На VDir выберите кнопку конфигурации и убедитесь, что обычные расширения ASP.NET сопоставлены с .NET 2.0 ISAPI dll.Это будет что-то вроде

    C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll.

  • - это ASP.NET 2включен в IIS (в IIS 6 по умолчанию он отключен): в диспетчере IIS включите папку расширений веб-службы, чтобы включить ее.

  • Развернули ли вы global.asax?

0 голосов
/ 19 ноября 2010

Нашел - роутинг на самом деле работает, моих URL не было. Я использовал javascript для создания некоторых URL, и оказалось, что я не ссылался на

http: // localhost / MyApplication / Controller / Action / ID

Я на самом деле ссылался на

http: // localhost / Controller / Action / ID

Создание таких ссылок работало на сервере разработки, но после развертывания сайта в виртуальном каталоге на веб-сервере эти адреса были неправильными из-за дополнительного имени приложения в URL.

В заключение, будьте осторожны с вашими URL - не создавайте их из строк, как я.

...