Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将物理路径转换为有关的相对路径http://localhost:_C#_Asp.net_Relative Path - Fatal编程技术网

C# 将物理路径转换为有关的相对路径http://localhost:

C# 将物理路径转换为有关的相对路径http://localhost:,c#,asp.net,relative-path,C#,Asp.net,Relative Path,我使用asp.net 4和c# 我有这段代码,可以让我找到图像的物理路径。 正如你所看到的,我得到了我的机器物理paghfile:///C:. string pathRaw = HttpContext.Current.Request.PhysicalApplicationPath + "Statics\\Cms\\Front-End\\Images\\Raw\\"; 结果: file:///C:/......../f005aba1-e286-4d9e-b9db-e6239f636e63.jpg

我使用asp.net 4和c#

我有这段代码,可以让我找到图像的物理路径。 正如你所看到的,我得到了我的机器物理paghfile:///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的结果

希望我能够表达我自己不幸的是,我不确定这个案例中的术语


谢谢你的帮助

您可以使用Server.MapPath进行此操作

   string pathRaw = System.Web.HttpContext.Current.Server.MapPath(“somefile.jpg“);
利用
ApplicationPath
-获取服务器上ASP.NET应用程序的虚拟应用程序根路径

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

使用 然后使用来自的答案获得相对路径


它可能需要一些调整,但应该允许您执行所需的操作。

通过Request.ApplicationPath左侧剥离pathRaw内容,并使用

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

最简单的方法是去掉物理应用程序路径。 如果在代码中无法做到这一点,只需将其从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,因此会引发异常

虚拟路径是通过剥离物理应用程序路径,将所有反斜杠转换为斜杠,并在路径前面加上前缀
“~/”
,以指示它应被解释为相对于应用程序根


之后,您可以将虚拟路径转换为相对路径,以便使用输出到浏览器。

是否有原因不能仅使用相对路径(/Statistics/Cms/…)?感谢Dave的评论,但我需要转换pathRaw的结果,我无法在代码中隐式使用相对路径。你知道怎么做吗?感谢adnvaceyou无法将物理路径动态转换为URL-唯一有意义的是,如果您知道可能的根值,以及它们最终映射到的URL,然后执行一些字符串操作以URL替换根路径部分,然后用正斜杠替换反斜杠。。。但我仍然不明白为什么需要使用物理路径来访问URL?当然,如果这是在ASP.NET应用程序中运行的,那么您可以使用相对路径来提供映像?感谢Dave的评论!我需要转换变量pathRaw。。。有什么想法吗?这不是他想要的-他已经有了物理路径,需要将其转换为URL-这是不可能的。我认为他用了错误的方法。同意Dave的观点-问题是如何从物理到虚拟。Pranay我用你的代码trid(我需要处理pathRaw变量),结果是:你知道如何解决它吗?谢谢我想你忘了设置