Microsoft.AspNet.Http.HttpRequest에서 원시 URL 가져 오기
HttpRequest
Asp.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
'UFO ET IT' 카테고리의 다른 글
Postgres를 사용하여 한 번에 3 개의 테이블에 데이터 삽입 (0) | 2020.12.11 |
---|---|
Android 툴바 : 가로 모드의 작은 제목 텍스트 (0) | 2020.12.11 |
설치된 웹팩 버전을 확인하는 방법 (0) | 2020.12.11 |
typescript에서 문자열 보간을 만드는 방법은 무엇입니까? (0) | 2020.12.11 |
함수에 전달 된 변수 이름 찾기 (0) | 2020.12.11 |