Преобразование физического пути в относительный в отношении http://localhost: - PullRequest
6 голосов
/ 08 июня 2011

Я использую asp.net 4 и c #.

У меня есть этот код, который позволяет мне найти физический путь для изображения.Как вы можете видеть, я получаю файл физического файла моего компьютера: /// C:.

string pathRaw = HttpContext.Current.Request.PhysicalApplicationPath + "Statics\\Cms\\Front-End\\Images\\Raw\\";

Результат:

file:///C:/......../f005aba1-e286-4d9e-b9db-e6239f636e63.jpg

Но мне нужно отобразить это изображение на передней части моеговеб-приложение, поэтому мне нужен такой результат:

http://localhost:1108/Statics/Cms/Front-End/Images/Raw/f005aba1-e286-4d9e-b9db-e6239f636e63.jpg

Как это сделать?

PS: мне нужно преобразовать результат переменной pathRaw .

Надеюсь, я смог выразить себя, к сожалению, я не уверен в терминологии в этом случае.

Спасибо за вашу помощь!

Ответы [ 5 ]

12 голосов
/ 08 июня 2011

Самое простое, что нужно сделать, это избавиться от физического пути приложения. Если вы не можете сделать это в своем коде, просто удалите его из переменной pathRaw. Как это:

public string GetVirtualPath( string physicalPath )
{
   if ( !physicalPath.StartsWith( HttpContext.Current.Request.PhysicalApplicationPath ) )
   {
      throw new InvalidOperationException( "Physical path is not within the application root" );
   }

   return "~/" + physicalPath.Substring( HttpContext.Current.Request.PhysicalApplicationPath.Length )
         .Replace( "\\", "/" );
}

Код сначала проверяет, находится ли путь в корне приложения. Если нет, то нет способа определить URL для файла, поэтому выдается исключение.

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

После этого вы можете преобразовать виртуальный путь в относительный путь для вывода в браузер, используя ResolveClientUrl (virtualPath) .

1 голос
/ 08 июня 2011

Удалите содержимое вашего pathRaw слева с помощью Request.ApplicationPath и создайте URL, используя

Uri navigateUri = new Uri(System.Web.HttpContext.Current.Request.Url, relativeDocumentPath);
1 голос
/ 08 июня 2011

Получить рут вашего приложения, используя Request.ApplicationPath затем используйте ответ из этого вопроса , чтобы получить относительный путь.

Возможно, потребуется немного доработать, но это позволит вам делать то, что вам нужно.

0 голосов
/ 08 июня 2011

Использовать ApplicationPath - получение корневого пути виртуального приложения ASP.NET на сервере.

Label1.Text = Request.ApplicationPath;
Image1.ImageUrl = Request.ApplicationPath + "/images/Image1.gif";
0 голосов
/ 08 июня 2011

Для этого вы можете использовать Server.MapPath.

   string pathRaw = System.Web.HttpContext.Current.Server.MapPath(“somefile.jpg“);
...