#asp.net-mvc-3 #asp.net-mvc-routing
#asp.net-mvc-3 #asp.net-mvc-routing
Вопрос:
Я работал над приложением MVC 3. Я использовал встроенный веб-сервер VS 2010.
Сегодня по разным причинам меня попросили переместить его в виртуальный каталог и запустить под управлением IIS 7, все еще на моем компьютере для разработки.
Теперь, когда его URL-адрес localhost/MyVirtualDirectory
отличается от localhost:12345
, что мне нужно изменить, чтобы маршрутизация работала, и где?
Я не использую какие-либо необработанные HTML-теги привязки или перенаправления, просто @Html.ActionLink
и так далее. Согласно тому, что я прочитал, если бы я делал что-то способом MVC, это изменение должно было быть прозрачным.
Но в самом начале происходит сбой перенаправления после аутентификации. При успешной аутентификации предполагается, что он вернет результат
this.RedirectToAction("index", "Home")
Вы уже догадались: вместо /MyVirtualDirectory/Home
перенаправление идет на /Home
. Сбой.
Итак, чего-то не хватает, что необходимо настроить. Что это?
Комментарии:
1. Как
RegisterRoutes
выглядит ваше приложение в вашем Global.asax?2. Вероятно, вы неправильно настроили IIS. Это должно быть полностью прозрачно.
3. @DarinDimitrov Хорошо, я готов в это поверить. Должны ли приложения MVC настраиваться иначе, чем приложения WebForms?
4. @AnnL., абсолютно нет. ASP.NET MVC — это просто обычный ASP.NET приложение. Ничего не изменилось. Итак, если вы знаете, как настроить ASP.NET приложение в IIS вы знаете, как настроить ASP.NET Приложение MVC в IIS. И если вы не знаете, этот вопрос вы могли бы задать на serverfault.com что лучше подходит для подобных вопросов конфигурации сервера.
5. @DarinDimitrov Думал, я знаю как, но прошло некоторое время. Я посещу serverfault.com. И спасибо.
Ответ №1:
В IIS выберите свой виртуальный каталог и «Преобразовать в приложение». Кроме того, если вы используете карту маршрутов по умолчанию в вашем Global.asax, она должна выглядеть примерно так:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Обоснование: Если вы поместите свое MVC-приложение в подкаталог другого приложения, то IIS рассмотрит корень этого другого приложения вместо корня вашего MVC-приложения. Если это то поведение, которое вы хотите (маловероятно), то вам нужно изменить ваш Global.asax, чтобы учесть это:
routes.MapRoute(
"Default", // Route name
"MyVirtualDirectory/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Комментарии:
1. Большое вам спасибо. Однако, согласно IIS, мой виртуальный каталог уже является приложением. У меня есть IIS7.5, и в представлении содержимого веб-сайта по умолчанию в моем виртуальном каталоге указан «тип» приложения.
2. Хорошо, когда вы написали виртуальный каталог в своем вопросе, я воспринял это как возможный показатель того, что вы не указали каталог в качестве приложения. Вы могли бы проверить настройки пула приложений и т.д., Но, как упоминалось ранее, это, вероятно, становится скорее serverfault.com вопрос.
3. Я обнаружил свою проблему, которая оказалась неправильно выведенным URL в инструкции перенаправления. Ваш ответ — хороший ответ на заданный вопрос, хотя — я просто ошибался в том, что происходило на самом деле. Большое вам спасибо за ответ!