首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在ASP.Net核心中获取绝对路径Server.MapPath的替代方法

如何在ASP.Net核心中获取绝对路径Server.MapPath的替代方法
EN

Stack Overflow用户
提问于 2017-05-16 12:00:24
回答 5查看 94.1K关注 0票数 49

如何在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),我需要获取这个绝对路径。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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>();
票数 112
EN

Stack Overflow用户

发布于 2018-11-10 21:40:50

不推荐使用* Hack *,但仅供参考您可以使用var abs = Path.GetFullPath("~/Content/Images/Sample.PNG").Replace("~\\","");从相对路径获取绝对路径

我更喜欢上面的DI/服务方法,但是如果你处于非依赖注入的情况下(例如,一个用Activator实例化的类),那么这个方法是可行的。

票数 8
EN

Stack Overflow用户

发布于 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"));
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43992261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档