1、需求
asp.net core 3.0的web項目中,在controller中,想要獲取wwwroot下的imgs/banners文件夾下的所有文件;
在傳統的asp.net web應用中,是用Server.MapPath()即可獲取到web的根目錄;
但在asp.net core 3.0的web項目中,已不能這樣用了;
2、解決方案
1)、說明
ASP.NET Core為文件提供了兩個不同的位置:
內容根
- 這是應用程序二進制文件和其他私有文件的保存位置。Web根目錄
- 這是公共文件的保存位置(Web項目中的wwwroot文件夾)。
默認情況下,Web根位於內容根目錄下。但是也存在Web根位於其他位置的部署。
2)、具體解決方法
通過在controller中注冊IWebHostEnvironment
即可:
[Route("api")]
[ApiController]
public class resourceController : ControllerBase
{
private readonly IWebHostEnvironment _webHostEnvironment;
public resourceController(IWebHostEnvironment webHostEnvironment)
{
_webHostEnvironment = webHostEnvironment;
}
[HttpGet("banners")]
public ActionResult GetBanners()
{
string content_path = _webHostEnvironment.ContentRootPath;//D:\work\_BASE\pspb\pspb\src\pspb\
string web_path = _webHostEnvironment.WebRootPath;//D:\work\_BASE\pspb\pspb\src\pspb\wwwroot
DirectoryInfo di = new DirectoryInfo(web_path + "/imgs/banners");
FileInfo[] fis = di.GetFiles();
var temp = fis.Select(p => string.Format("imgs/banners/{0}", p.Name));
return Ok(new { ok = true, data = temp });
}
}
_webHostEnvironment對象的ContentRootPath
屬性就是內容根
目錄;
_webHostEnvironment對象的WebRootPath
屬性就是web根
目錄;