HttpContext.Current.Request.Url.ToString()
来获取当前URL。
在ASP.NET中获取当前URL的方法有多种,以下是一些常用的方法:
1、使用HttpContext对象
Request.GetDisplayUrl()方法:这是最直接简单的一种方式,在控制器或中间件中,可以通过HttpContext.Request.GetDisplayUrl()
来获取当前请求的完整URL。
C#代码示例
string displayUrl = HttpContext.Request.GetDisplayUrl();
Request.Scheme、Host、PathBase、Path和QueryString组合:通过这些属性的组合也可以构建出完整的URL,可以使用以下代码来实现:
C#代码示例
string url = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}{HttpContext.Request.PathBase}{HttpContext.Request.Path}{HttpContext.Request.QueryString}";
2、定义HttpRequest的扩展类(适用于ASP.NET Core)
可以定义一个静态类,其中包含一个静态方法来获取完整的URL。
C#代码示例
using Microsoft.AspNetCore.Http; using System.Text; public static class HttpRequestExtensions { public static string GetAbsoluteUri(this HttpRequest request) { return new StringBuilder() .Append(request.Scheme) .Append("://") .Append(request.Host) .Append(request.PathBase) .Append(request.Path) .Append(request.QueryString) .ToString(); } }
然后在需要的地方调用这个扩展方法:
string requestUrl = HttpRequestExtensions.GetAbsoluteUri(HttpContext.Request);
3、通过IHostApplicationLifetime接口(适用于BackgroundService)
在BackgroundService中,由于不能直接访问HttpContext,但可以通过ASP.NET Core应用程序的生存期事件来等待应用程序启动完成后再获取启动地址,可以使用IHostApplicationLifetime接口,并在应用程序启动后通过IServiceProvider获取IServer和IServerAddressesFeature来检索地址。
C#代码示例
internal class DemoBackgroundService : BackgroundService { private readonly IServiceProvider _services; private string _url; public DemoBackgroundService(IServiceProvider services, IHostApplicationLifetime lifetime) { _services = services; lifetime.ApplicationStarted.Register(OnAppStarted); } public void OnAppStarted() { var server = _services.GetService<IServer>(); _url = server.Features.Get<IServerAddressesFeature>().Addresses.First(); } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (string.IsNullOrWhiteSpace(_url)) { await Task.Delay(1000); } Console.WriteLine("BackgroundService ExecuteAsync"); Console.WriteLine(_url); await Task.CompletedTask; } }
4、使用Request对象的属性(适用于ASP.NET MVC)
获取完整URL:Request.Url.ToString()
可以返回当前请求的完整URL。
C#代码示例
string url = Request.Url.ToString();
获取虚拟目录名+页面名+参数:Request.RawUrl
或Request.Url.PathAndQuery
可以返回不包含主机地址信息的字符串。
C#代码示例
string url = Request.RawUrl; // 或者 string url = Request.Url.PathAndQuery;
获取虚拟目录名+页面名:HttpContext.Current.Request.Url.AbsolutePath
或HttpContext.Current.Request.Path
可以返回?前的内容,但不包括主机信息。
C#代码示例
string url = HttpContext.Current.Request.Url.AbsolutePath; // 或者 string url = HttpContext.Current.Request.Path;
获取域名:HttpContext.Current.Request.Url.Host
可以返回域名。
C#代码示例
string url = HttpContext.Current.Request.Url.Host;
获取参数:HttpContext.Current.Request.Url.Query
可以返回?后面的参数部分。
C#代码示例
string url = HttpContext.Current.Request.Url.Query;
在ASP.NET中获取当前URL的方法多种多样,开发者可以根据具体的应用场景和需求选择合适的方法,无论是在控制器、中间件还是后台服务中,都能找到相应的解决方案来获取当前请求的URL信息。