이전 버전의 asp.net에서는
@Request.Url.AbsoluteUri
하지만 변한 것 같습니다. asp.net core 1.0에서 어떻게 할 수 있습니까?
답변
호스트와 경로를 별도로 가져와야합니다.
@Context.Request.Host@Context.Request.Path
답변
스키마, 호스트, 경로 및 queryString이 필요합니다.
@string.Format("{0}://{1}{2}{3}", Context.Request.Scheme, Context.Request.Host, Context.Request.Path, Context.Request.QueryString)
또는 새로운 C # 6 기능 “문자열 보간”사용
@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")
답변
다음과 같은 확장 방법을 사용할 수 있습니다 Request
.
Request.GetDisplayUrl()
답변
이것은 .net core 1.0에서 .net core 1.0에서 항상 가능하며 Microsoft.AspNetCore.Http.Extensions
, HttpRequest
전체 URL을 얻기 위해에 확장자를 추가합니다 . GetEncodedUrl .
예 : 면도기보기에서 :
@using Microsoft.AspNetCore.Http.Extensions
...
<a href="@Context.Request.GetEncodedUrl()">Link to myself</a>
2.0부터 상대 경로가 있고 GetEncodedPathAndQuery를 쿼리 합니다.
답변
Uri 의 AbsoluteUri 속성을 사용합니다. .Net 코어를 사용하면 다음과 같은 요청에서 Uri를 빌드해야합니다.
var location = new Uri($"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}");
var url = location.AbsoluteUri;
예를 들어 요청 URL이 ‘ http://www.contoso.com/catalog/shownew.htm?date=today ‘이면 동일한 URL을 반환합니다.
답변
이 확장 방법을 사용하는 것을 고려할 수 있습니다 ( Microsoft.AspNetCore.Http.Extensions
네임 스페이스에서 :
@Context.Request.GetDisplayUrl()
일부 프로젝트의 경우 더 유연한 솔루션을 선호합니다. 두 가지 확장 방법이 있습니다.
1) 첫 번째 방법은 Uri
들어오는 요청 데이터에서 객체를 생성 합니다 (선택적 매개 변수를 통한 일부 변형 포함). 2) 두 번째 메서드는 Uri
개체를 받고 string
다음 형식으로 반환 합니다 (후행 슬래시 없음) : Scheme_Host_Port
public static Uri GetUri(this HttpRequest request, bool addPath = true, bool addQuery = true)
{
var uriBuilder = new UriBuilder
{
Scheme = request.Scheme,
Host = request.Host.Host,
Port = request.Host.Port.GetValueOrDefault(80),
Path = addPath ? request.Path.ToString() : default(string),
Query = addQuery ? request.QueryString.ToString() : default(string)
};
return uriBuilder.Uri;
}
public static string HostWithNoSlash(this Uri uri)
{
return uri.GetComponents(UriComponents.SchemeAndServer, UriFormat.UriEscaped);
}
용법:
//before >> https://localhost:44304/information/about?param1=a¶m2=b
Request.GetUri(addQuery: false);
//after >> https://localhost:44304/information/about
//before >> https://localhost:44304/information/about?param1=a¶m2=b
new Uri("https://localhost:44304/information/about?param1=a¶m2=b").GetHostWithNoSlash();
//after >> https://localhost:44304
답변
public string BuildAbsolute(PathString path, QueryString query = default(QueryString), FragmentString fragment = default(FragmentString))
{
var rq = httpContext.Request;
return Microsoft.AspNetCore.Http.Extensions.UriHelper.BuildAbsolute(rq.Scheme, rq.Host, rq.PathBase, path, query, fragment);
}