Ошибка 404 при перемещении приложения ASP.NET MVC с IIS6 на IIS7

У меня только что появился новый ящик для разработки, и у меня возникли проблемы с запуском и запуском моего проекта MVC. В моем старом ящике были Server 2003 и IIS6. Мне удалось заставить мои приложения MVC работать с этим ящиком после настройки сопоставления подстановочных знаков, как упоминалось здесь. На моем новом компьютере установлена ​​Vista Business и IIS7. Когда я скопировал свое приложение и попытался запустить его, я получил сообщение «http 404. Ресурс не найден». ошибка. Однако, если я создам новое приложение MVC и запустил его, все будет работать нормально. Я также скопировал приложение Nerd Dinner из своей старой коробки, и оно тоже отлично работает.

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


person Hamman359    schedule 20.08.2009    source источник
comment
Можете ли вы запустить Fiddler и посмотреть, какой запрос на самом деле генерирует ошибку 404?   -  person Stephen Newman    schedule 20.08.2009
comment
Это первоначальный запрос на главную страницу приложения. т.е. {имя хоста} / {имя приложения} /   -  person Hamman359    schedule 20.08.2009


Ответы (2)


Я разместил ответ в своем блоге, посмотрите его на

http://nkitdugar.blogspot.com/2011/02/special-care-while-migrating-mvc.html

У меня было приложение на основе MVC, которое ранее размещалось на IIS 6. Теперь IIS 6 не поддерживает URL-маршруты без расширений по умолчанию, поэтому нам нужно добавить некоторое расширение к имени контроллера в маршруте по умолчанию, определенном как {ControllerName} .aspx { Метод действия} {Id} в IIS6. Также, если мы хотели использовать другие расширения, такие как .mvc и т. Д., Тогда нам нужно было сопоставить его с помощью таких методов, как сопоставление с подстановочными знаками и т. Д.

Теперь, когда мы перешли на IIS7, поддерживаются URL-адреса без расширений, что означает, что там могут быть URL-адреса, не имеющие соответствующего физического местоположения.

Поэтому, когда вы переносите свое приложение MVC на IIS7, убедитесь, что маршрут по умолчанию, определенный в Globla.asax, не имеет какого-либо расширения, определенного с помощью контроллера, такого как {controller}.aspx\{action method}\{Id}, и измените его на \clean URL route {Controller}\{Action Method}\{ID(optional)}. Во-вторых, вы должны иметь в виду, что режим конвейера AppPool веб-сайта должен быть установлен как интегрированный из классического.

Вот и все, теперь ваш веб-сайт готов к размещению на IIS7.

person Ankit Dugar    schedule 16.02.2011
comment
Не забудьте внимательно прочитать FAQ по саморекламе. Также обратите внимание, что необходимо публиковать отказ от ответственности каждый раз, когда вы ссылаетесь на свой собственный сайт / продукт. - person j0k; 29.11.2012

Хорошо, я разобрался с проблемой. Рассматриваемое приложение представляет собой перенос приложения Web Forms на MVC в качестве экспериментального проекта. Таким образом, когда проект был впервые создан, мы просто добавили .MVC в конец имени проекта, чтобы сделать его {имя проекта} .MVC. Это, что неудивительно теперь, когда я знаю, что происходит, вызвало проблему с определениями маршрутизации по умолчанию. Я изменил имя, чтобы использовать подчеркивание вместо точки, и теперь все работает. Я предполагаю, что он работал нормально при работе под IIS6, поскольку он был настроен с использованием сопоставления с подстановочными знаками, и поэтому не было расширения .MVC, которое могло бы его запутать.

person Hamman359    schedule 20.08.2009