ASP.NET MVC 3: переместил приложение в виртуальный каталог. Что я должен изменить?

#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 в инструкции перенаправления. Ваш ответ — хороший ответ на заданный вопрос, хотя — я просто ошибался в том, что происходило на самом деле. Большое вам спасибо за ответ!