Использование Cassini с виртуальным путем, который содержит точки - PullRequest
1 голос
/ 22 февраля 2012

Я работаю над существующим проектом в ASP.NET, который основан в папке, содержащей точки

http://localhost/My.Awesome.WebClient/

Эта установка прекрасно работает с использованием интегрированного сервера Visual Studio Develompent, но завершается неудачно, когда я добавляю содержимое MVC и пытаюсь получить к нему доступ ( Ошибка 404 Ресурс не найден ).

http://msdn.microsoft.com/en-us/library/ee941656.aspx, кажется, объясняет проблему:

Если вы создаете веб-сайт файловой системы в Visual Studio 2010, и веб-сайт находится в папке, содержащей точку (.) В имени папки, маршрутизация URL-адресов не будет работать надежно. Ошибка HTTP 404 возвращается из некоторых виртуальных путей. Это происходит потому, что Visual Studio 2010 запускает сервер разработки Visual Studio (Cassini), используя неверный путь к корневому виртуальному каталогу.

Однако проект представляет собой веб-проект , а не веб-сайт, и он потерпел неудачу только тогда, когда я начал использовать MVC.

Проблема может быть легко воспроизведена:

  1. Файл - Новый - Проект - Веб-приложение ASP.NET MVC 3
  2. Редактирование настроек проекта, Интернет: использование Visual Studio Development Server
  3. Установить виртуальный путь к тому, что содержит точку
  4. Попробуйте запустить сайт

Есть ли способ заставить это работать, кроме использования IIS вместо Cassini?

Edit:

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

в моем файле Global.asax.cs:

        routes.MapRoute(
            "Default", // Route name
            // Notice that I added the virtual path here
            "My.Awesome.WebClient/{controller}/{action}/{id}", // URL with parameters
            new { action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

        // This is also new
        routes.MapRoute(
            "Root", // Route name
            "", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );

Используя этот обходной путь, мои MVC-сайты работают, но только со следующим URL:

http://localhost/My.Awesome.WebClient/My.Awesome.WebClient/

1 Ответ

3 голосов
/ 22 февраля 2012

Если вы не получите ответ на этот вопрос (лично я не знаю, как с этим справиться), я бы порекомендовал использовать «IIS Express», который можно загрузить бесплатно. Его можно установить на компьютерах разработчиков, и вы можете управлять многими настройками сервера с помощью файла web.config, который довольно ненавязчив.

Вы можете скачать его здесь:

http://www.microsoft.com/download/en/details.aspx?id=1038

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

...