代码之家  ›  专栏  ›  技术社区  ›  Peter Meyer

在ASP.NET应用程序中执行server.mappath反向操作的最有效方法是什么

  •  24
  • Peter Meyer  · 技术社区  · 17 年前

    我正在构建一个MVC应用程序,在该应用程序中,我从文件系统中读取一个文件列表,我想将该文件的相对URL传递给视图,最好以“~/”作为前缀,这样无论选择哪个视图,cab都会适当地呈现该URL。

    为此,我需要枚举文件系统中的文件,并将其物理路径转换回相对URL。我已经试验过一些算法,但是我关心的是效率和最小的字符串操作。此外,我相信.NET框架中没有任何东西可以执行此操作,但是最新的MVC版本中是否有什么东西可以执行此操作?

    3 回复  |  直到 9 年前
        1
  •  24
  •   Christian C. Salvadó    17 年前

    目前我不知道任何内置的方法,但并不难,我是这样做的:

    • 我们需要获取应用程序根目录,并用新路径替换它 ~
    • 我们需要把反斜杠改成斜杠

    public string ReverseMapPath(string path)
    {
        string appPath = HttpContext.Current.Server.MapPath("~");
        string res = string.Format("~{0}", path.Replace(appPath, "").Replace("\\", "/"));
        return res;
    }
    
        2
  •  0
  •   Shazwazza    15 年前
        3
  •  -2
  •   vGHazard    9 年前

    我做了一些挖掘,试图让UrlHelper类在控制器之外工作,然后我想起了在ASPX页面中做同样事情的一个老技巧:

    string ResolveUrl(string pathWithTilde)
    

    希望这有帮助! 见: https://msdn.microsoft.com/en-us/library/system.web.ui.control.resolveurl(v=vs.110).aspx