您现在的位置是:百科 >>正文
aspnetcore 获取某个目录
百科11人已围观
简介ASP.NET Core 里获取某个目录,最直接的办法是 IWebHostEnvironment.ContentRootPath。这玩意儿返回的是应用启动的根目录,通常就是项目文件所在的那一层。但你要 ...
ASP.NET Core 里获取某个目录,某个目录最直接的某个目录办法是 IWebHostEnvironment.ContentRootPath。这玩意儿返回的某个目录是应用启动的根目录,通常就是某个目录项目文件所在的那一层。但你要是某个目录天真地以为所有环境都长一个样,那就踩坑了。某个目录
开发环境里,某个目录ContentRootPath 指向项目根目录,某个目录比如 C:\Users\你\source\repos\MyApp。某个目录发布到服务器后,某个目录它指向的某个目录是你部署文件夹,比如 /var/www/myapp。某个目录这俩路径长得不一样,某个目录但逻辑上都是某个目录“应用的家”。拿它拼文件路径,某个目录比如 Path.Combine(_env.ContentRootPath, "Data", "seed.json"),基本够用。
但有个细节容易被忽略:ContentRootPath 不等于 AppContext.BaseDirectory。后者是程序集所在的物理位置,发布后是 bin 子目录。你要是用 Directory.GetCurrentDirectory(),那更玄——它取决于你从哪个目录启动进程,命令行里 cd 到别处再跑 dotnet,返回的路径就变了。所以别用那个。
我说个具体场景。之前给一个批量导入工具写接口,需要把上传的 Excel 存到临时目录。一开始我直接用了 Directory.GetCurrentDirectory(),本地跑没问题,部署到 IIS 后,工作目录被重置成 system32 了,文件全写进系统文件夹,差点把服务器搞炸。后来换成 IWebHostEnvironment.ContentRootPath 拼一个 Temp 子目录,才稳定。这个坑,网上吐槽帖一抓一大把。
要是你想拿 wwwroot 下的静态文件,别自己拼路径,用 IWebHostEnvironment.WebRootPath。它专门指向 wwwroot。但注意,如果项目里没建 wwwroot 文件夹,这个属性是 null。你用的时候得判空,或者干脆用 Path.Combine(_env.ContentRootPath, "wwwroot") 兜底。
还有一个冷门但实用的:获取当前请求的物理路径。比如用户上传了图片,你想知道它落在哪个绝对位置。这时候可以用 IHttpContextAccessor 拿 HttpContext.Request.Path,但那是虚拟路径,得再映射。其实更省事的是直接用 IHostEnvironment 注入,构造函数里接一下,然后到处用。别在静态类里 new 一个 DirectoryInfo 去猜路径,环境变量不一定可靠。
最后说个场景:你需要读取 appsettings.json 旁边的某个配置文件。直接 Path.Combine(_env.ContentRootPath, "config.json") 就行。但要是程序集被单独拷到别处跑,比如用 dotnet myapp.dll 指定了不同的工作目录,ContentRootPath 依然指向 dll 所在目录吗?不一定。它取决于你启动时怎么设置的。稳妥做法是启动时显式配置:Host.CreateDefaultBuilder(args).UseContentRoot(Directory.GetCurrentDirectory())。不过大多数模板项目已经帮你弄好了,不用太操心。
一句话总结:用 IWebHostEnvironment,别用 Directory.GetCurrentDirectory()。前者是框架给你管好的,后者是操作系统层面的“当前”,两者经常对不上。写代码时多问一句:这个路径是跟着应用走,还是跟着进程走?想清楚,就不容易翻车。
Tags:
上一篇:seo和sem是什么意思
下一篇:三亚测绘技术开发服务培训中心
相关文章
网站安全漏洞扫描工具
百科上周三凌晨两点,我盯着屏幕上的红色告警列表,后背发凉。一个不起眼的参数注入漏洞,让攻击者能直接读取数据库里的用户密码哈希——而这家公司三个月前刚通过等保测评。工具报告打印出来有47页,但没人翻到第39 ...
【百科】
阅读更多drug delivery and translational research
百科2018年冬天,我在波士顿一家医院的肿瘤科候诊区,看到一位中年女性正用平板电脑查看自己临床试验的入组信息。屏幕上的页面不是传统病历,而是一个动态的给药方案界面——纳米颗粒载药系统正在根据她当天的血液指 ...
【百科】
阅读更多为什么搜网址进去之后显示errorpage
百科浏览器地址栏里敲下一串网址,回车,屏幕中央却弹出一行冰冷的“Error Page”。这行字背后,十有八九不是你的错,而是你撞上了一堵看不见的墙——服务器返回了错误状态码,而网站没有为这个错误准备一个友 ...
【百科】
阅读更多