另外,您可以使用PlatformServices.Default.Application.ApplicationBasePath,而不是注入IApplicationEnvironment。
编辑:这是 MapPath/UnmapPath 作为PlatformServices 的扩展的可能实现:
removed (see EDIT2)
EDIT2:稍作修改,添加了IsPathMapped() 以及一些检查是否真的需要路径映射/取消映射。
public static class PlatformServicesExtensions
{
public static string MapPath(this PlatformServices services, string path)
{
var result = path ?? string.Empty;
if (services.IsPathMapped(path) == false)
{
var wwwroot = services.WwwRoot();
if (result.StartsWith("~", StringComparison.Ordinal))
{
result = result.Substring(1);
}
if (result.StartsWith("/", StringComparison.Ordinal))
{
result = result.Substring(1);
}
result = Path.Combine(wwwroot, result.Replace('/', '\\'));
}
return result;
}
public static string UnmapPath(this PlatformServices services, string path)
{
var result = path ?? string.Empty;
if (services.IsPathMapped(path))
{
var wwwroot = services.WwwRoot();
result = result.Remove(0, wwwroot.Length);
result = result.Replace('\\', '/');
var prefix = (result.StartsWith("/", StringComparison.Ordinal) ? "~" : "~/");
result = prefix + result;
}
return result;
}
public static bool IsPathMapped(this PlatformServices services, string path)
{
var result = path ?? string.Empty;
return result.StartsWith(services.Application.ApplicationBasePath,
StringComparison.Ordinal);
}
public static string WwwRoot(this PlatformServices services)
{
// todo: take it from project.json!!!
var result = Path.Combine(services.Application.ApplicationBasePath, "wwwroot");
return result;
}
}
EDIT3: PlatformServices.WwwRoot() 返回实际执行路径,在.net core 2.0 中,DEBUG 模式为 xxx\bin\Debug\netcoreapp2.0,这显然不是必需的。相反,将PlatformServices 替换为IHostingEnvironment 并使用environment.WebRootPath。