netcore 获取应用程序或者站点根路径的一点知识和教训

文章讲述了作者在使用abpvnext进行报表导出时,尝试通过不同方式获取站点根目录的过程。首先使用IWebHostEnvironment,但为了保持业务类的独立性,转而使用AppContext.BaseDirectory,然而遇到HTTP文件访问问题。最后发现必须使用IHostEnvironment(ContentRootPath)才能正确获取站点根目录并解决文件访问问题。

最近在用abpvnext做报表导出,涉及到要在站点根目录生成pdf文件提供下载。于是就要获取站点根路径。

开头搜索资料提示用IWebHostEnvironment.ContentRootPath,来实现获取站点根目录。这个其实是正解。.netcore的通用规则,使用任何借口都是依赖注入,我是觉得这玩意挺麻烦的。

但是我是在一个业务类里面实现pdf文件生成,为了保持这个业务类的相对独立性,我又偷懒不想将IWebHostEnvironment通过控制器逐层传递依赖注入到业务类里面。 

鬼使神差的不知道怎么的搜到了可以使用AppContext.BaseDirectory属性来获取当前应用程序的根目录。重点是他不用注入再逐层传递啊, 不管三七二十一就用上了。  然后文件也能正常的在项目的bin\wwwroot 目录下面生成文件,但是等我用http+相对文件路径去到浏览器里访问文件的时候,他就死都访问不到,路径举例:
http://localhost:44315/File/Report/20231130/温湿度曲线报表_20231130000000130.pdf

   然后调试了很久,各种办法试,发现http方式只能访问到项目的根目录JQ.TAHM.HttpApi.Host这一级,在这一级的wwwroot目录里的文件是可以访问到的。 但是往下的 bin\Debug\net6.0\wwwroot\File\Report\20231130   这种,http他是访问不到的。

那就只能改为用IHostEnvironment,或者IWebHostEnvironment 来获取站点根目录了。使用IHostEnvironment.ContentRootPath 他这个获取到的是bin的父级 (站点根目录JQ.TAHM.HttpApi.Host)&n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值