将物理路径转换为http:// localhost的相对路径:

时间:2011-06-08 09:52:33

标签: c# asp.net relative-path

我使用asp.net 4和c#。

我有这段代码,可以让我找到图像的物理路径。 如你所见,我得到了我的机器物理pagh文件:/// C:。

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

结果:

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

但是我需要在我的Web应用程序的前端显示这个图像,所以我需要这样的结果:

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

怎么做?

PS:我需要转换变量pathRaw的结果

希望我能够表达自己,不幸的是我在这种情况下不确定术语。

感谢您的帮助!

5 个答案:

答案 0 :(得分:12)

最简单的方法是摆脱物理应用程序路径。 如果您不能在代码中执行此操作,只需将其从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 :(得分:1)

使用Request.ApplicationPath获取应用程序的根目录  然后使用this question的答案来获得相对路径。

可能需要稍微调整一下,但它应该允许你做你想要的事情。

答案 2 :(得分:1)

通过Request.ApplicationPath左键剥离您的pathRaw内容,并使用

构建URL
Uri navigateUri = new Uri(System.Web.HttpContext.Current.Request.Url, relativeDocumentPath);

答案 3 :(得分:0)

利用 ApplicationPath - 获取ASP.NET应用程序在服务器上的虚拟应用程序根路径。

Label1.Text = Request.ApplicationPath;
Image1.ImageUrl = Request.ApplicationPath + "/images/Image1.gif";

答案 4 :(得分:-1)

您可以使用Server.MapPath。

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