在.net framework中,可以使用 Request.Url 来获取当前请求url,但.net core 已经舍弃了这个,现在提供三种方式供大家选择
一、使用 Request.GetDisplayUrl()
该方法位于Microsoft.AspNetCore.Http.Extensions 下,能获取到请求的连接,但是当有进行地址重写访问控制器的时候,会出现问题。
二、创建扩展方法,自定义请求链接
public static string GetCompleteUrl(this HttpRequest source)
{
return new StringBuilder()
.Append(source.Scheme)
.Append("://")
.Append(source.Host)
.Append(source.PathBase)
.Append(source.Path)
.Append(source.QueryString)
.ToString();
}
该扩展方法是对httprequest进行重写,然后将地址拼接,但是当有进行地址重写访问控制器的时候,也会出现问题。
三、创建新的扩展方法,获取request的Features属性下的RawTarget值
public static string GetRawUrl(this HttpRequest request)
{
try
{
var httpContext = request.HttpContext;
var requestFeature = httpContext.Features.Get<IHttpRequestFeature>();
return request.HttpContext.Request.Scheme + "://" + request.HttpContext.Request.Host + requestFeature.RawTarget;
}
catch (Exception)
{
}
return "";
}
该方法能获取到经过地址重写前的请求连接