Запуск приложения ASP.NET MVC из виртуального каталога в IIS7 - PullRequest
6 голосов
/ 15 июня 2011

Можно ли запустить приложение MVC из виртуального каталога в IIS7? Я построил приложение с открытым исходным кодом в ASP.NET MVC3 и думаю, не было ли это ошибкой; вероятно, если сайт не может быть запущен из виртуального каталога.

Примите простой маршрут по умолчанию / home / index , если он запущен из виртуального каталога с именем / app , на самом деле это будет / app / home index. Какой вид испортит вещи для маршрутизации.

Я не хочу, чтобы пользователю приходилось менять маршруты и перекомпилировать проект, чтобы использовать приложение в виртуальном каталоге. Есть ли способ изменить параметр конфигурации, чтобы указать корневую папку приложения?

Ответы [ 4 ]

20 голосов
/ 15 июня 2011

Возможно ли запустить приложение MVC из виртуального каталога в IIS7?

Мало того, что это возможно, но это предпочтительный способ.

Какой тип портит вещи для маршрутизации.

Нет, если вы используете Html помощники при работе с URL, которые позаботятся об этом.

Вот типичный пример того, что вы никогда не должны делать:

<script type="text/javascript">
    $.ajax({
        url: '/home/index'
    });
</script>

и вот как это должно быть сделано:

<script type="text/javascript">
    $.ajax({
        url: '@Url.Action("index", "home")'
    });
</script>

Вот еще один типичный пример того, чтовы никогда не должны делать:

<a href="/home/index">Foo</a>

и вот как это должно быть написано:

@Html.ActionLink("Foo", "Index", "Home")

Вот еще один пример того, что вы никогда не должны делать:

<form action="/home/index" method="opst">

</form>

и вот как это должно быть написано:

@using (Html.BeginForm("Index", "Home"))
{

}

Я думаю, вы поняли.

3 голосов
/ 15 июня 2011

Насколько я знаю, все маршруты основаны на корне приложения, а не на фактическом корне, поэтому представьте, что они начинаются с ~/, а не /

3 голосов
/ 15 июня 2011

Да, это прекрасно работает, и нет, это не портит маршрутизацию .Однако приложение, которое вы запускаете, может содержать ошибки и не поддерживать эту конфигурацию.

Вам не нужен «параметр конфигурации», потому что IIS и ASP.NET уже обрабатывают это правильно.

Однако вам необходимо избегать жестко закодированных URI в ваших представлениях.

Например, сделайте следующее:

<img src="<%: Url.Content("~/Content/Images/Image.png") %>" />

... вместо:

<img src="/Content/Images/Image.png" />

... и аналогично для ссылок и ссылок на таблицы стилей.

2 голосов
/ 15 июня 2011

Да, это работает. И пока вы используете вспомогательные методы для создания URL-адресов действий (например, <%=Html.ActionLink(...) %>), нет необходимости перенастраивать или перекомпилировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...