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

Gib*_*boK 6 c# asp.net relative-path

我使用asp.net 4和c#.

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

string pathRaw = HttpContext.Current.Request.PhysicalApplicationPath + "Statics\\Cms\\Front-End\\Images\\Raw\\";
Run Code Online (Sandbox Code Playgroud)

结果:

file:///C:/......../f005aba1-e286-4d9e-b9db-e6239f636e63.jpg
Run Code Online (Sandbox Code Playgroud)

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

http://localhost:1108/Statics/Cms/Front-End/Images/Raw/f005aba1-e286-4d9e-b9db-e6239f636e63.jpg
Run Code Online (Sandbox Code Playgroud)

怎么做?

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

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

谢谢你的帮助!

Mar*_*len 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( "\\", "/" );
}
Run Code Online (Sandbox Code Playgroud)

代码首先检查路径是否在应用程序根目录中.如果没有,则无法找出该文件的URL,因此会抛出异常.

通过剥离物理应用程序路径来构造虚拟路径,将所有反斜杠转换为斜杠并在路径前添加前缀"~/"以指示它应该被解释为相对于应用程序根目录.

之后,您可以使用ResolveClientUrl(virtualPath)将虚拟路径转换为相对路径以输出到浏览器.