ASP.NET Core Web API如何获取Web API URL基础地址?
在C# Web API中获取基础URL的方法
针对ASP.NET Core Web API
ASP.NET Core里已经弃用了HttpContext.Current,需要通过依赖注入IHttpContextAccessor来获取请求上下文:
- 先注册服务
在Program.cs中添加以下代码,注册HttpContextAccessor:
builder.Services.AddHttpContextAccessor();
- 注入并使用
在控制器或服务类中注入IHttpContextAccessor,然后构造基础URL:
private readonly IHttpContextAccessor _httpContextAccessor; // 构造函数注入 public YourController(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public IActionResult GetBaseUrl() { var request = _httpContextAccessor.HttpContext.Request; // 拼接基础URL:协议 + 域名端口 + 应用路径(如果有) var baseUrl = $"{request.Scheme}://{request.Host}{request.PathBase}"; return Ok(baseUrl); }
request.Scheme:获取协议(http/https)request.Host:获取域名+端口(比如localhost:5000)request.PathBase:如果API部署在子路径下(比如/example/api),会获取到/example
针对旧版ASP.NET Web API(Framework)
如果是基于.NET Framework的Web API,HttpContext.Current可以正常使用,但要确保代码处于请求上下文线程中(异步方法或后台线程可能无法获取):
var request = HttpContext.Current.Request; var baseUrl = $"{request.Url.Scheme}://{request.Url.Authority}{request.ApplicationPath}";
request.Url.Authority:等价于域名+端口request.ApplicationPath:获取应用的虚拟路径
关于IWebHostEnvironment
IWebHostEnvironment仅提供环境相关的文件路径(比如wwwroot目录)和环境名称(开发/生产),不包含请求级别的URL信息,所以无法用来获取基础URL。
内容的提问来源于stack exchange,提问作者Venkat
相关产品推荐
相关产品推荐

