ASP.NET Core中文件路径开头使用~/的必要性解析
~/路径标记? 在本地开发环境中,~/和/看起来效果一致,但~/是ASP.NET Core专为应用根路径设计的标记,在服务器部署场景下是必要的,原因如下:
适配子目录部署场景
本地开发时你的应用通常直接运行在站点根(如https://localhost:5001/),此时/和~/指向同一位置。但如果将应用部署到服务器的子路径(比如https://example.com/myblog/),/会指向站点根(example.com/),而~/会自动指向应用的根目录(example.com/myblog/)。这时候用/CoreBlogTema/web/images/b1.jpg会请求站点根下的资源,实际资源却在应用子目录下,导致404错误;而~/CoreBlogTema/web/images/b1.jpg会被解析为/myblog/CoreBlogTema/web/images/b1.jpg,能正确找到资源。支持应用路径配置
如果在Program.cs中通过app.UsePathBase("/appprefix")配置了应用路径前缀,~/会自动适配这个前缀,生成正确的路径。比如~/images/b1.jpg会被解析为/appprefix/images/b1.jpg,而/images/b1.jpg仍指向站点根下的路径,无法匹配到应用内的资源。Razor视图的专属解析机制
在.cshtml视图文件中,~/由ASP.NET Core的视图引擎负责解析,它会根据当前应用的运行上下文动态替换为正确的绝对路径;而/是浏览器端的绝对路径,完全依赖站点根的位置,和应用的部署位置无关。提升代码可维护性
使用~/可以让路径写法保持一致,不管应用部署在根路径还是子路径,都不需要修改代码中的路径字符串,避免了部署时批量替换路径的麻烦。
内容的提问来源于stack exchange,提问作者Karayeniceri

