Виртуальный каталог IIS и пути к каталогам ASP.NET - PullRequest
18 голосов
/ 19 сентября 2009

проблема

Я сталкиваюсь с типичной дилеммой виртуального каталога в том, что у вас есть несколько путей к вашему приложению ASP.Net, и вы развертываете приложение в виртуальном каталоге IIS. Тогда все пути, относящиеся к «корню сети» (например, «/ images»), не будут работать, поскольку приложение находится в пути к виртуальному каталогу.


Решения

A. Сделать папку «images» виртуальным каталогом. Таким образом, "/ images" всегда будет существовать.

B. Используйте "<%=Request.ApplicationPath%>/Imagenes" в качестве источника моих изображений. Это прекрасно работает в IIS, но я не вижу его ни во время разработки, ни во время отладки.

Это решение также включает следующие инструкции:

  • System.Web.VirtualPathUtility.ToAbsolute
  • ResolveClientUrl
  • Request.ApplicationPath

C. Использовать родственные пути к текущему элементу управления / странице. Это точно знать, где находится папка с изображениями относительно моего текущего файла (без перехода в корень. Поэтому я бы использовал такие вещи, как "", "../", "../../" и т. Д.


Решение, которое я ищу

Сказал это. Мне не нравятся эти решения. Я хотел бы решение в файле web.config или в IIS. Некоторое замешательство я пишу в файле web.config, который сообщает IIS, где на самом деле находится мое приложение (виртуальный каталог).

Любой совет?

Ответы [ 2 ]

10 голосов
/ 19 сентября 2009

Используете ли вы тильду (~) для своих путей, где вы можете?

~ относится к корню виртуального веб-приложения ....

~ / images например.

3 голосов
/ 19 октября 2010

Если это только для CSS-файлов на стороне клиента, то использование директивы url делает путь относительно пути таблицы стилей, а не страницы:

h1#title { background: url('dog.gif') no-repeat 0 0; } 

Также, если вы находитесь на asp.net mvc, у вас есть доступ к:

<script src="<%= Url.Content("~/scripts/new.js") %>" type="text/javascript"></script>
...