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가 아니므로 사용시주의해야합니다.
답변
.NET Core 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
답변
다른 솔루션은 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;
}
답변
다음 확장 메서드는 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}";
}
}