UFO ET IT

Microsoft.AspNet.Http.HttpRequest에서 원시 URL 가져 오기

ufoet 2020. 12. 11. 19:02
반응형

Microsoft.AspNet.Http.HttpRequest에서 원시 URL 가져 오기


HttpRequestAsp.Net 5 (vNext)의 클래스와 같은 요청의 URL에 대한 분석 사항, (다른 것들 사이에) 포함 Scheme, Host, Path

그러나 원래 요청 URL을 노출하는 곳은 아직 발견되지 않았습니다. (이전 버전에는 Request.Uri)

HttpRequest에서 사용할 수있는 구성 요소에서 함께 조각하지 않고도 원시 URL을 다시 가져올 수 있습니까?


직접 액세스 할 수없는 것 같지만 프레임 워크를 사용하여 빌드 할 수 있습니다.

Microsoft.AspNetCore.Http.Extensions.UriHelper.GetFullUrl(Request)

위의 방법을 확장 방법으로 사용할 수도 있습니다.

이것은 string대신 a를 반환 Uri하지만 목적에 부합해야합니다! (이것은 또한의 역할을하는 것 같습니다 UriBuilder.)

@mswietlicki에게 감사드립니다. 그리고 내 대답에서 네임 스페이스 변경을 지적하기 위해 @CF에게도!


Nuget 패키지 추가 / 사용 :

using Microsoft.AspNetCore.Http.Extensions; 

(ASP.NET Core RC1에서는 Microsoft.AspNet.Http.Extensions에있었습니다)

그런 다음 다음을 실행하여 전체 http 요청 URL을 얻을 수 있습니다.

var url = httpContext.Request.GetEncodedUrl();

또는

var url = httpContext.Request.GetDisplayUrl();

목적에 따라.


당신이 경우 정말 원하는 실제, 원시 URL을 다음과 같은 확장 방법을 사용할 수 있습니다 :

public static class HttpRequestExtensions
{
    public static Uri GetRawUrl(this HttpRequest request)
    {
        var httpContext = request.HttpContext;

        var requestFeature = httpContext.Features.Get<IHttpRequestFeature>();

        return new Uri(requestFeature.RawTarget);
    }
}

이 메서드는 객체 자체 RawTarget에 표시되지 않는 요청을 활용합니다 HttpRequest. 이 속성은 ASP.NET Core의 1.0.0 릴리스에 추가되었습니다. 해당 버전 또는 최신 버전을 실행하고 있는지 확인하십시오.

노트! 이 속성은 원시 URL을 노출 하므로 문서에 명시된대로 디코딩되지 않았습니다.

이 속성은 라우팅 또는 권한 부여 결정에 내부적으로 사용되지 않습니다. UrlDecoded가 아니므로 사용시주의해야합니다.


다른 솔루션은 URI객체를 직접 원했기 때문에 내 요구에 적합하지 않았고이 경우 문자열 연결을 피하는 것이 더 낫다고 생각하므로 a를 사용하는 것 UriBuilder보다이 확장 메서드를 만들었으며 다음 과 같은 URL에서도 작동합니다 http://localhost:2050.

public static Uri GetUri(this HttpRequest request)
{
    var uriBuilder = new UriBuilder
    {
        Scheme = request.Scheme,
        Host = request.Host.Host,
        Port = request.Host.Port.GetValueOrDefault(80),
        Path = request.Path.ToString(),
        Query = request.QueryString.ToString()
    };
    return uriBuilder.Uri;
}

ASP.NET Core 2.x razor 페이지에서 :

@using Microsoft.AspNetCore.Http.Extensions
@Context.Request.GetEncodedUrl() //Use for any purpose (encoded for safe automation)

또 다른 기능이 있습니다.

@Context.Request.GetDisplayUrl() //Use to display the URL only

다음 확장 메서드는 pre-beta5의 논리를 재현합니다 UriHelper.

public static string RawUrl(this HttpRequest request) {
    if (string.IsNullOrEmpty(request.Scheme)) {
        throw new InvalidOperationException("Missing Scheme");
    }
    if (!request.Host.HasValue) {
        throw new InvalidOperationException("Missing Host");
    }
    string path = (request.PathBase.HasValue || request.Path.HasValue) ? (request.PathBase + request.Path).ToString() : "/";
    return request.Scheme + "://" + request.Host + path + request.QueryString;
}

이 확장 프로그램은 나를 위해 작동합니다.

Microsoft.AspNetCore.Http 사용;

    public static class HttpRequestExtensions
    {
        public static string GetRawUrl(this HttpRequest request)
        {
            var httpContext = request.HttpContext;
            return $"{httpContext.Request.Scheme}://{httpContext.Request.Host}{httpContext.Request.Path}{httpContext.Request.QueryString}";
        }
    }

ASP.NET 5 beta5 :

Microsoft.AspNet.Http.Extensions.UriHelper.Encode(
    request.Scheme, request.Host, request.PathBase, request.Path, request.QueryString);

참고URL : https://stackoverflow.com/questions/28120222/get-raw-url-from-microsoft-aspnet-http-httprequest

반응형