gpt4 book ai didi

c# - 如何在 Server.MapPath 的 ASP.Net Core 替代方法中获取绝对路径

转载 作者:IT王子 更新时间:2023-10-29 04:20:01 28 4
gpt4 key购买 nike

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

我尝试使用 IHostingEnvironment 但它没有给出正确的结果。

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

我在 wwwroot 文件夹中有一个图像文件 (Sample.PNG) 我需要获取此绝对路径。

最佳答案

从 .Net Core v3.0 开始,它应该是 IWebHostEnvironment访问已移至 Web 特定环境界面的 WebRootPath

IWebHostEnvironment 作为依赖项注入(inject)依赖类。该框架将为您填充它

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注入(inject)依赖类。

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>();

关于c# - 如何在 Server.MapPath 的 ASP.Net Core 替代方法中获取绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43992261/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com