如何解析OWIN主机下文件的虚拟路径?

Pau*_*ner 29 c# owin

在ASP.NET和IIS下,如果我有"〜/ content"形式的虚拟路径,我可以使用MapPath方法将其解析为物理位置:

HttpContext.Server.MapPath("~/content");
Run Code Online (Sandbox Code Playgroud)

如何在OWIN主机下解析到物理位置的虚拟路径?

TN.*_*TN. 34

您可以使用AppDomain.CurrentDomain.SetupInformation.ApplicationBase来获取应用程序的根目录.使用根路径,您可以为Owin实现"MapPath".

我还不知道另一种方式.(该ApplicationBase属性也由Microsoft.Owin.FileSystems.PhysicalFileSystem使用.)


Bor*_*itz 20

你不应该使用HttpContext.Server,因为它只适用于MVC.HostingEnvironment.MapPath()是要走的路.但是,它不适用于自托管owin.所以,你应该直接得到它.

var path = HostingEnvironment.MapPath("~/content");
if (path == null)
{
    var uriPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
    path = new Uri(uriPath).LocalPath + "/content";
}
Run Code Online (Sandbox Code Playgroud)

  • HostingEnvironment也在System.Web程序集中定义 - 它不能在IIS之外工作. (3认同)
  • 不确定名称空间,但Server.MapPath()需要WebApi不使用的HttpContext.HostingEnvironment.MapPath()不需要HttpContext (2认同)