asp.net core 3.1获取web应用的根目录

99封情书 提交于 2021-02-16 15:18:22

1.需求

asp.net core 3.1的web项目中,在controller中,想要获取wwwroot下的images文件夹路径;
在传统的asp.net web应用中,是用Server.MapPath()即可获取到web的根目录;
但在asp.net core 3.1的web项目中,已不能这样用了

2.解决方案

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根目录;

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!