【问题标题】:Using Server.MapPath in MVC3在 MVC3 中使用 Server.MapPath
【发布时间】:2011-09-29 16:00:28
【问题描述】:

我有密码

string xsltPath = System.Web.HttpContext.Current.Server.MapPath(@"App_Data") + "\\" + TransformFileName

返回

C:\inetpub\wwwroot\websiteName\SERVICENAME\App_Data\FileName.xsl

为什么我得到了 ServiceController 的路径 SERVICENAME?我想要 App_Data 的路径,它位于

C:\inetpub\wwwroot\websiteName\App_Data\FileName.xsl

【问题讨论】:

    标签: c# asp.net asp.net-mvc-3 iis server.mappath


    【解决方案1】:

    您需要指定要从虚拟根目录开始:

    string xsltPath = Path.Combine(System.Web.HttpContext.Current.Server.MapPath(@"~/App_Data"), TransformFileName);
    

    此外,最好使用Path.Combine 组合路径而不是连接字符串。 Path.Combine 将确保您不会遇到双路径分隔符的情况。

    编辑

    您能否定义“绝对”和“相对”路径以及它们与“物理”和“虚拟”路径的比较?

    MSDN 在相对、物理和虚拟路径上有一个good explanation。看看那里。

    【讨论】:

    • 这行得通。我正在阅读一篇关于“虚拟根”的文章,但我没有很好地遵循它。 dotnetperls.com/mappath您能否定义“绝对”和“相对”路径以及它们与“物理”和“虚拟”路径的比较?
    • @P.Brian.Mackey:Absolute 表示从根目录开始的路径,例如“/someTopDirectory/someSubDirectory”。相对是指您当前所在位置的路径,因此如果您在“someSubDirectory”中并想要到达“someTopDirectory”,则相对路径是“..”(上一个目录)。物理路径是系统看到的路径:“C:\inetpub\myApp\someTopDirectory\someSubDirectory”。虚拟路径就像 Web 服务器应用程序看到的那样:“/someTopDirectory/someSubDirectory”。
    • @P.Brian.Mackey:为了更清楚地说明您的情况,MapPath 将虚拟路径转换为物理路径。在虚拟路径的参数中,您希望提供绝对路径而不是相对路径。在 Web 应用程序中表示绝对路径的“根”的标记是“~”,因此绝对虚拟根 =“~/”。
    【解决方案2】:

    到目前为止给出的答案是您正在寻找的,但我认为,在您的特定情况下,您实际需要的是:

    AppDomain.CurrentDomain.GetData("DataDirectory").ToString()
    

    如果该目录名称在未来版本的 MVC 或 ASP.NET 中更改,这仍将返回 App_Data 目录的文件路径。

    【讨论】:

    • 我不认为这是一个特别好的主意。您依赖于一个未记录的(官方) AppDomain 参数,它是一个实现细节。它比App_Data更有可能改变。
    • 它已记录在案,并且是标准的,但它适用于 ADO.Net,而不是特别适用于 ASP.Net。 DataDirectory 不会改变,但它可能并不总是指向 App_Data
    【解决方案3】:

    尝试这样做(@"~/App_Data")~/代表根目录。

    【讨论】:

      猜你喜欢
      • 2012-08-30
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2013-10-11
      • 1970-01-01
      相关资源
      最近更新 更多