Asp.net mvc 从Web API访问虚拟目录

Asp.net mvc 从Web API访问虚拟目录,asp.net-mvc,iis,asp.net-web-api,Asp.net Mvc,Iis,Asp.net Web Api,我有一个需要从.NETWebAPI应用程序和单独的.NETMVC应用程序访问的文件文件夹(表单模板)。这些表单模板的文件夹位于网站之外。理想情况下,我希望能够将路径存储在Web.Config文件中,以便在本地环境中轻松测试应用程序 我尝试在托管站点上设置虚拟目录,但不知道如何在Web API中引用它们。我尝试了几种引用虚拟目录的方法,但都不起作用。大多数帖子建议尝试Server.MapPath(“MyVirtualDirectory”),但它返回“…\wwwroot\MyApiControlle

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

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

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


那么,在.NETWebAPI应用程序中使用虚拟目录访问资源的正确方法是什么?对于.NET MVC应用程序,同样的方法也适用吗?

您需要使用
HostingEnvironment
,例如:

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

    result = HostingEnvironment.MapPath(path);

    return result;
}
此外,
HostingEnvironment
还提供了类似于
ApplicationPhysicalPath
的功能:

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

为什么不使用以http开头的绝对url?HostingEnvironment.MapPath(“MyVirtualDirectory”)引发以下错误:此处不允许相对虚拟路径“MyVirtualDirectory”。明白了。我使用了Path.Combine(HostingEnvironment.ApplicationPhysicalPath,“../../MyPhysicalDirectory”),只是需要注意:并非所有托管环境都允许这样做。可能存在权限问题。