如何正确获取包含虚拟目录的HTTP请求路径
解决方案
要获取包含虚拟目录的完整请求路径,你可以通过以下几种方式实现:
拼接PathBase与Path
HttpContext.Request.PathBase会存储应用所在的虚拟目录路径(即/web),将它与Request.Path拼接就能得到你需要的完整路径:string fullPath = HttpContext.Request.PathBase + HttpContext.Request.Path; // 最终结果为 /web/{guid}使用GetEncodedUrl()获取完整URL后提取路径
如果你需要先拿到完整的请求URL(包含域名),再提取路径部分,可以用这个方法:string fullUrl = HttpContext.Request.GetEncodedUrl(); string fullPath = new Uri(fullUrl).AbsolutePath; // 结果同样是 /web/{guid}ASP.NET Core 3.0+ 专用方法GetPathByServer()
该方法会直接返回包含虚拟目录的完整路径,无需手动拼接:string fullPath = HttpContext.Request.GetPathByServer();
补充说明
HttpContext.Request.Path的设计就是返回相对于应用虚拟目录的路径,所以只会得到/{guid};而PathBase对应虚拟目录部分,两者组合才是从根域名开始的完整路径。
内容的提问来源于stack exchange,提问作者A. Gladkiy
相关产品推荐
相关产品推荐

