如何在ASP.NET核心中获取绝对路径Server.MapPath
的替代方法
我尝试过使用IHostingEnvironment
,但是它没有给出正确的结果。
IHostingEnvironment env = new HostingEnvironment();
var str1 = env.ContentRootPath; // Null
var str2 = env.WebRootPath; // Null, both doesn't give any result
我在wwwroot文件夹中有一个图像文件(Sample.PNG),我需要获取这个绝对路径。
发布于 2017-05-16 12:07:24
从.Net核心3.0版开始,访问已移动到web特定环境界面的WebRootPath
应为IWebHostEnvironment
。
将IWebHostEnvironment
作为依赖项注入依赖类。框架将为您填充它
public class HomeController : Controller {
private IWebHostEnvironment _hostEnvironment;
public HomeController(IWebHostEnvironment environment) {
_hostEnvironment = environment;
}
[HttpGet]
public IActionResult Get() {
string path = Path.Combine(_hostEnvironment.WebRootPath, "Sample.PNG");
return View();
}
}
您可以更进一步,创建自己的路径提供程序服务抽象和实现。
public interface IPathProvider {
string MapPath(string path);
}
public class PathProvider : IPathProvider {
private IWebHostEnvironment _hostEnvironment;
public PathProvider(IWebHostEnvironment environment) {
_hostEnvironment = environment;
}
public string MapPath(string path) {
string filePath = Path.Combine(_hostEnvironment.WebRootPath, path);
return filePath;
}
}
并将IPathProvider
注入依赖类。
public class HomeController : Controller {
private IPathProvider pathProvider;
public HomeController(IPathProvider pathProvider) {
this.pathProvider = pathProvider;
}
[HttpGet]
public IActionResult Get() {
string path = pathProvider.MapPath("Sample.PNG");
return View();
}
}
确保将服务注册到DI容器
services.AddSingleton<IPathProvider, PathProvider>();
发布于 2018-11-10 21:40:50
不推荐使用* Hack *,但仅供参考您可以使用var abs = Path.GetFullPath("~/Content/Images/Sample.PNG").Replace("~\\","");
从相对路径获取绝对路径
我更喜欢上面的DI/服务方法,但是如果你处于非依赖注入的情况下(例如,一个用Activator
实例化的类),那么这个方法是可行的。
发布于 2019-10-17 23:05:52
.NET核心3.0
变量1:
string path = System.IO.Directory.GetCurrentDirectory();
变量2:
string path = AppDomain.CurrentDomain.BaseDirectory.Substring(0, AppDomain.CurrentDomain.BaseDirectory.IndexOf("\\bin"));
https://stackoverflow.com/questions/43992261
复制相似问题