Поделиться через


Путь к веб-узлу ASP.NET

Обновлен: Ноябрь 2007

При работе с ресурсами на веб-узле часто необходимо указать путь для ресурса. Например, можно использовать URL-путь для ссылки на файл с изображением на странице или для ссылки на другую страницу на веб-узле. Аналогичным образом код в веб-приложении может использовать физический путь к файлу, находящемуся на сервере для чтения или записи. ASP.NET предоставляет средства для ссылок на ресурсы и для определения пути страниц или других ресурсов в приложении.

Указание пути на ресурсы

Во многих случаях элементы или элементы управления на странице должны ссылаться на внешний ресурс, например на файл. ASP.NET поддерживает различные методы для ссылок на внешние ресурсы. Ссылочный метод, который Вы выбрали, зависит от того, работаете ли вы с клиентским элементом или с серверным веб-элементом управления.

Клиентские элементы

Элементы, которые не являются серверными веб-элементами управления на странице — клиентские элементы — передаются в обозреватель в том виде, какие они есть. Таким образом, при ссылке на ресурс из клиентского элемента, путь необходимо оформлять согласно стандартным правилам написания URL-адреса в формате HTML. Можно использовать полные имена (которые также называются абсолютными) с указанием полного пути URL или различные типы относительных путей. Например, если страница содержит элемент img, можно установить его атрибут src с помощью одного из следующих путей:

  • Указать абсолютный путь URL-адреса. Указывать абсолютный путь URL-адреса полезно, если ссылка идет на ресурс, находящийся в другом месте, например на внешний веб-узел.

    <img src="https://www.contoso.com/MyApplication/Images/SampleImage.jpg" />
    
  • Указать относительный путь от корня сайта, когда ссылка указывается относительно корня сайта (а не корня приложения). Указывать относительный путь от корня сайта полезно, если требуется обратиться к папке, располагающейся в корне сайта. Обычно в этих папках находятся общие ресурсы для всех приложений сайта, например картинки или файлы клиентских сценариев.

    В этом примере предполагается, папка с картинками лежит в корне сайта.

    <img src="/Images/SampleImage.jpg" />
    

    Если веб-узел называется https://www.contoso.com, путь может быть записан следующим образом:

    https://www.contoso.com/Images/SampleImage.jpg
    
  • Указать относительный путь, отсчитываемый от пути текущей страницы.

    <img src="Images/SampleImage.jpg" />
    
  • Относительный путь разрешается в качестве однорангового текущего пути страницы.

    <img src="../Images/SampleImage.jpg" />
    
    ms178116.alert_note(ru-ru,VS.90).gifПримечание.

    По умолчанию обозреватели просматривают относительные пути, используя текущую страницу URL как основа. Однако можно включить HTML элемент base на страницу, чтобы указать путь к альтернативной базе.

Серверные элементы управления

В серверных элементах управления ASP.NET, которые ссылаются на ресурсы сервера ASP.NET, можно использовать абсолютный или относительный путь, как это делается для клиентских элементов. Если используются относительные пути, они указываются относительно пути страницы, пользовательского элемента управления или темы, в которой содержится элемент управления. Например представьте, что имеется пользовательский элемент управления в папке controls (элементы управления). Пользовательский элемент управления содержит Image серверный веб-элемент управления, у которого свойству ImageUrl присвоен следующий путь: Images/SampleImage.jpg.

При запуске пользовательского элемента управления путь определяется следующим: /Controls/Images/SampleImage.jpg. Это верно независимо от расположения страницы, которая содержит пользовательский элемент управления.

ms178116.alert_note(ru-ru,VS.90).gifПримечание.

На основных страницах пути к ресурсам вычисляются на основе пути содержимого страницы. Дополнительные сведения см. в разделе Общие сведения о главных страницах ASP.NET.

Абсолютные и относительные пути ссылок в серверном элементе управления имеют следующие недостатки:

  • Абсолютные пути не переносимые между приложениями. Если переместить приложение, то приложение, содержащее абсолютный путь, приведет к разрыву связи.

  • Относительные пути в стиле клиента элементов может быть достаточно трудно поддерживать, если переместить ресурсы или страницы в другие папки.

Чтобы преодолеть эти недостатки, ASP.NET включает корневой оператор (~) в веб-приложениях, который можно использовать при задании пути в серверном элементе управления. В ASP.NET оператор ~ обрабатывает текущий каталог как корневой. Можно использовать оператор ~ в сочетании с папками для задания пути на основе текущего корня.

В следующем примере показана работа оператора ~. Он используется для задания пути к картинке относительно корня при использовании серверного элемента управления Image. В этом примере изображение файла отсчитывается от папки images («изображения»), расположенной непосредственно под текущей папкой, где находится веб-приложение.

<asp:image runat="server" id="Image1"
  ImageUrl="~/Images/SampleImage.jpg" />

Можно использовать оператор ~ в любом свойстве, связанном с путями в серверных элементах управления. Оператор ~ распознается только для серверных элементов управления и в коде сервера. Нельзя использовать оператор ~ для клиентских элементов.

ms178116.alert_note(ru-ru,VS.90).gifПримечание.

Только для мобильных страниц, если приложение зависит от сеансов без cookie или может получать запросы от мобильных устройств, которые требуют сеанса без cookie, использование тильды (« ~ ») в пути может привести к случайному созданию нового сеанса и потере данных сеанса. Чтобы задать свойства для мобильных элементов управления с путем, включающим тильду (таких как «~/путь»), разрешите путь с помощью метода ResolveUrl перед присвоением его свойству.

Определение физического пути файла для текущего веб-узла

В приложении может потребоваться определить путь файла или другого ресурса на сервере. Например, если приложение считывает или записывает в текстовый файл программно, необходимо предоставить полный физический путь файла к методам, используемым для чтения и записи.

Не рекомендуется жестко кодировать путь к физическому файлу (например C:\Website\MyApplication) в приложении, так как путь может измениться при перемещении или разворачивании приложения. Однако ASP.NET предоставляет способы получения любого физического пути приложения программным путем. Можно использовать базовый путь к файлу для создания полного пути к требуемому ресурсу. Две наиболее часто используемые возможности ASP.NET для определения пути к файлу являются свойства объекта HttpRequest, которые возвращают сведения о пути и метод MapPath.

ms178116.alert_note(ru-ru,VS.90).gifПримечание.

Физический путь не должен отправляться клиенту, т. к. он может использоваться злоумышленниками для получения сведений о приложении.

Определение пути из свойства запроса

В приведенной ниже таблице перечислены свойства объекта HttpRequest, помогающие определить путь ресурсов в приложении.

Примеры, перечисленные в таблице, основаны на следующих допущениях:

  • Был сделан запрос обозревателя с использованием следующего URL-адреса: https://www.contoso.com/MyApplication/MyPages/Default.aspx.

  • Термин «виртуальный путь» ссылается на части запроса адреса URL, которые следуют за идентификатором сервера; в этом случае виртуальный путь является следующим: /MyApplication/MyPages/Default.aspx.

  • Физический путь для корня веб-узла выглядит следующим образом: C:\inetpub\wwwroot\MyApplication\.

  • Физический путь содержит папку с именем MyPages (Мои Страницы).

Свойство

Описание

ApplicationPath

Возвращает корневой путь текущего приложения, вне зависимости от того, где расположено приложение, выполнившее запрос. Например, свойство возвращает следующее: /.

CurrentExecutionFilePath

Получает виртуальный путь текущего запроса. Отличается от свойства FilePath, в котором CurrentExecutionFilePath является верным, если запрос был перенаправлен в серверный код. Например, свойство возвращает следующее: /MyApplication/MyPages/Default.aspx.

Если получить значение свойства в запущенном коде, в результате вызова Transfer или Execute, путь отражает расположение кода.

FilePath

Получает виртуальный путь текущего запроса. Например, свойство возвращает следующее: /MyApplication/MyPages/Default.aspx.

В отличие от свойства CurrentExecutionFilePath, FilePath не отражает передачи на стороне сервера.

Path

Получает виртуальный путь текущего запроса. Например, свойство возвращает следующее: /MyApplication/MyPages/default.aspx.

PhysicalApplicationPath

Возвращает физический путь в файловой системе к корневой папке приложения, выполняющегося в данный момент. Например, свойство возвращает следующее: C:\inetpub\wwwroot\.

PhysicalPath

Возвращает физический путь в файловой системе, соответствующий запрашиваемому URL. Например, свойство возвращает следующее: C:\inetpub\wwwroot\MyApplication\MyPages\default.aspx.

Использование метода MapPath

Метод MapPath возвращает полный физический путь для виртуального пути, который можно передать в метод. Например, следующий код возвращает путь к файлу с корневого каталога веб-узла:

Dim rootPath As String = Server.MapPath("~")
String rootPath = Server.MapPath("~");
ms178116.alert_note(ru-ru,VS.90).gifПримечание.

Путь, передаваемый в метод MapPath, должен быть относительным путем приложения, а не абсолютным.

См. также

Основные понятия

Макет веб-узла ASP.NET

Контекст страницы и приложения в веб-приложениях ASP.NET