当前位置:首页 > 行业动态 > 正文

ASP.NET如何获取并分析当前URL?

在ASP.NET中,你可以使用 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。

ASP.NET如何获取并分析当前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)

ASP.NET如何获取并分析当前URL?

获取完整URLRequest.Url.ToString()可以返回当前请求的完整URL。

C#代码示例

 string url = Request.Url.ToString();

获取虚拟目录名+页面名+参数Request.RawUrlRequest.Url.PathAndQuery可以返回不包含主机地址信息的字符串。

C#代码示例

 string url = Request.RawUrl; // 或者 string url = Request.Url.PathAndQuery;

获取虚拟目录名+页面名HttpContext.Current.Request.Url.AbsolutePathHttpContext.Current.Request.Path可以返回?前的内容,但不包括主机信息。

C#代码示例

ASP.NET如何获取并分析当前URL?

 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信息。