如何在ASP NET核心中获取绝对路径100替代方式

我试过用100,但效果不好.

IHostingEnvironment env = new HostingEnvironment();
var str1 = env.ContentRootPath; // Null
var str2 = env.WebRootPath; // Null, both doesn't give any result 

我有一个图像文件(Sample.PNG)在wwwroot个文件夹中,我需要得到这个绝对路径.

推荐答案

从.Net Core v3.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>();

Asp.net相关问答推荐

IISExpress未在ARM64 Mac/.NET 4.8上启动

授权错误错误 400:C# 上的 redirect_uri_mismatch

RNGCryptoServiceProvider - 随机数审核

你能从请求变量中确定时区吗?

获取没有主机的 url 部分

判断会话是否为空

使用 jQuery.ajax() 时如何处理错误?

ASP.NET 在更新面板更新时显示正在加载...消息

Twitter bootstrap glyphicons 不会出现在发布模式 404 中

使用 Visual Studio 2012 恢复删除的文件

如何解决 Kerberos 双跳问题?

Page.IsValid 是如何工作的?

无法共同创建探查器错误 - 但未使用探查器

如何从 ASP.Net 发布然后重定向到外部 URL?

您正在使用哪些身份验证和授权方案 - 为什么?

如何在 ASP.NET MVC 中设置时区?

Sys.WebForms.PageRequestManagerServerErrorException:处理服务器上的请求时发生未知错误.

System.Web.Caching 还是 System.Runtime.Caching 更适合 .NET 4 Web 应用程序

在 ASP.NET 中使用 SecureString 有什么好处吗?

静态变量是线程安全的吗? C#