Я пытаюсь изучить ASP.NET Core. Я все еще на начальном уровне. Извините, если мой вопрос слишком простой.
Я хочу получить доступ к изображению CoreBlogTeam/web/images/b1.jpg
из /Views/Blog/BlogReadAll.cshtml
:
<img src = "~/CoreBlogTema/web/images/b1.jpg"
<img src = "/CoreBlogTema/web/images/b1.jpg"
Оба расширения файлов img
работают.
Я исследовал темы «Физический путь», «Виртуальный путь» или «Относительный виртуальный путь».
"../" //the parent directory
"/" //the site root directory
Я понял такую информацию, как. Но я до сих пор не понимаю необходимости использования "~/". Я все еще работаю над небольшими проектами на своем компьютере. Я еще не работал над серверной частью, возможно, поэтому мне трудно в этом разобраться. Если я использую «/» вместо «~/», я указываю корневой каталог, и путь к файлу работает.
В просмотренных мной обучающих видеороликах используется «~/», но причина этого не объясняется.
Почему мы должны использовать «~/»? Я думаю, что это необходимое условие на стороне сервера, но я его не до конца понимаю.
Еще раз извините, если это простой вопрос. Я еще не работал на стороне сервера.
Спасибо.
~
— это специфическое для оболочки сокращение домашнего каталога текущего пользователя. Имеет ли это смысл или целесообразность, зависит от того, как настроен ваш веб-сервер.
Нет, это не имеет ничего общего с вашим домашним каталогом Unix ~
- оно предназначено для очень специфичной для Microsoft IIS цели (хотя веб-серверы Apache использовали ~ для этого, но это уже другая история).
В ASP.NET использование ~/
в начале пути URI означает, что путь является относительным к корню приложения - то есть похож на путь /foo/bar
относительно корня веб-сайта, но позволяет поднимать все веб-приложение. и перенесен в очевидный подкаталог, и такие вещи, как межстраничные ссылки, по-прежнему будут работать правильно.
Более детально:
Это потому, что ASP.NET Core, ASP.NET MVC и ASP.NET WebForms, начиная с 2001 года, имеют довольно интересную особенность: когда ~/
используется правильно, это означает, что веб-приложение может «жить» в произвольном подкаталоге. (или даже глубже), в специальном виртуальном каталоге веб-сайта IIS, называемом областью приложения, который позволяет им сосуществовать с другими веб-приложениями, не наступая друг другу на пятки.
Это было важно еще в те давние времена, когда стандартная инфраструктура как код и развертывание новых виртуальных машин и контейнеров за считанные секунды было чем-то, что могла сделать только IBM Big Iron для устаревших банков.
Это до сих пор документировано в холодных и черновых разделах сайта документации Microsoft.
Например, давайте снова представим, что на дворе 2003 год, вы управляете ИТ-инфраструктурой небольшой компании, и у вас есть только один веб-сайт IIS для работы, но вам нужно разместить три отдельных веб-приложения ASP.NET: фотогалерею, какое-то приложение для внутренних финансов и несколько статических страниц.
Поскольку им нужен общий доступ к одному веб-сайту, вы решаете поместить их под /photos
, /finance
и /
соответственно. Итак, вы открываете веб-пространство вашего веб-сайта (то есть его файловую систему) в C:\Inetpub\wwwroot\
, выполняете mkdir photos && mkdir finance
, а затем xcopy-развертываете эти файлы в этих подкаталогах, а затем настраиваете эти /photos
и /finance
каталоги как корень двух новых областей приложения в IIS. Менеджер.
... вот что означает значок шестеренки (вместо значка папки) в диспетчере IIS 6:
Теперь, поскольку приложение «Фотографии» и приложение «Финансы» являются веб-приложениями ASP.NET WebForms, это означает, что они оба имеют каталоги /bin
, но каталог /bin
обычно находится в корне веб-сайта - ну, нет: на самом деле посетители /bin
находятся в корне области приложения. (а корень веб-сайта — это его собственная корневая область приложения), поэтому вместо того, чтобы /photos
и /finance
делиться C:\Inetpub\wwwroot\bin\
, каждый из них получает свои собственные: C:\Inetpub\wwwroot\photos\bin
и C:\Inetpub\wwwroot\finance\bin
... им не только не придется использовать общий каталог /bin
, но они даже не будут совместно использовать один и тот же хост-процесс веб-сервера: отдельные приложения обычно настраиваются для запуска в разных процессах w3wp.exe поэтому если однажды произойдет сбой, это не приведет к сбою всего, что работает на том же веб-сайте.
Спасибо . Так что мне сейчас не нужно использовать «~/». Даже если я использую «/» и загружу его на сервер, у меня не возникнет никаких ошибок, будет ли это работать?
@Karayeniceri Я рекомендую людям по-прежнему использовать ~/
, потому что это означает, что ваши URI и пути по-прежнему будут каким-то образом проверяться ASP.NET (хотя я сейчас не могу придумать никаких примеров, извините). Вам это ничего не стоит :)
@Karayeniceri Я только что расширил свой ответ более подробно.
большое спасибо . Я пытаюсь понять :)
Отвечает ли это на ваш вопрос? Разница между ./ и ~/