【问题标题】:Accessing a Virtual Directory from a Web API从 Web API 访问虚拟目录
【发布时间】:2014-12-07 11:41:17
【问题描述】:

我有一个需要从 .NET Web API 应用程序和单独的 .NET MVC 应用程序访问的文件文件夹(表单模板)。这些表单模板的文件夹位于网站之外。理想情况下,我希望能够将路径存储在 Web.Config 文件中,以便可以在本地环境中轻松测试应用程序。

我尝试在托管站点上设置虚拟目录,但不知道如何在 Web API 中引用它们。我尝试了几种方法来引用无效的虚拟目录。大多数帖子建议尝试使用 Server.MapPath("MyVirtualDirectory") 但返回“....\wwwroot\MyApiController\Action\MyVirtualDirectory”,而不是虚拟目录的物理路径。

我删除了虚拟目录并尝试“导航”到正确的路径,但被“无法使用前导 .. 退出顶级目录”阻止。

那么在 .NET Web API 应用程序中使用虚拟目录访问资源的正确方法是什么?相同的方法是否适用于 .NET MVC 应用程序?

【问题讨论】:

  • 为什么不用绝对url,以http开头?

标签: asp.net-mvc iis asp.net-web-api


【解决方案1】:

你需要使用HostingEnvironment,比如:

public static string MapPath(string path){
    string result;

    result = HostingEnvironment.MapPath(path);

    return result;
}

另外HostingEnvironment 提供ApplicationPhysicalPath 等功能:

result = HostingEnvironment.ApplicationPhysicalPath + "App_Data\\somefile.xml";

【讨论】:

  • HostingEnvironment.MapPath("MyVirtualDirectory") 引发以下错误:此处不允许使用相对虚拟路径 'MyVirtualDirectory'。
  • 知道了。我使用 Path.Combine(HostingEnvironment.ApplicationPhysicalPath, "../../MyPhysicalDirectory")
  • 请注意:并非所有托管环境都允许这样做。可能存在权限问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 2014-06-18
  • 2014-07-08
  • 1970-01-01
  • 2013-09-05
  • 2012-06-28
相关资源
最近更新 更多