Как получить полный виртуальный путь к приложению ASP.NET - PullRequest
33 голосов
/ 01 июня 2009

Как узнать полный виртуальный путь, на котором размещено мое приложение? Например:

http://www.mysite.com/myApp

или

http://www.mysite.com/myApp/mySubApp

Я знаю путь к приложению HttpRequest, но он возвращает только имя папки, в которой сейчас находится мое приложение, но как мне получить начальную часть?

Ответы [ 6 ]

73 голосов
/ 01 июня 2009

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

Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath

Технически, «приложение» - это виртуальный каталог, определенный в IIS, и Request.ApplicationPath возвращает именно это. Если вы хотите получить папку, в которой обрабатывается текущий запрос , вы можете сделать это:

VirtualPathUtility.GetDirectory(Request.Path)

ASP.NET не имеет представления о том, как отличить ваше подприложение от более крупного приложения, если оно не определено как виртуальный каталог в IIS. Не регистрируясь в IIS, он видит все это как одно приложение.

18 голосов
/ 01 июня 2009
Request.Url

содержит несколько пунктов, которые вы можете использовать, см. Изображение ниже:

enter image description here

6 голосов
/ 03 февраля 2014

В .NET 4.5

    VirtualPathUtility.ToAppRelative(path)
4 голосов
/ 23 ноября 2009

Приведенный ниже код решит эту задачу, однако вам придется немного настроить для двух типов сценариев:

  1. Размещено как отдельное веб-приложение.
  2. Размещено как виртуальное приложение в веб-приложении.

    HttpContext.Current.Request.Url.GetLeftPart (UriPartial.Authority) + HttpRuntime.AppDomainAppVirtualPath;

2 голосов
/ 01 июня 2009

Попробуйте (не пробовал)

public string GetVirtualPath(string physicalPath)
{
string rootpath = Server.MapPath("~/");
physicalPath = physicalPath.Replace(rootpath, "");
physicalPath = physicalPath.Replace("\\", "/");
return "~/" + physicalPath;
}

Ссылка 1

Ссылка 2

0 голосов
/ 12 марта 2019

Url.Content("~") отлично сработало для меня и приятно и просто. Я использовал это в виде, как это:

<a href="@(Url.Content("~" + attachment))">

Здесь мой attachment - это путь типа "/ Content / Documents / Blah.PDF" .

Когда мое приложение публикуется на сайте IIS, который использует виртуальный каталог, Url.Content("~") преобразуется в просто имя виртуального каталога, например, "/ app-test" .

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