이전 버전의 asp.net에서는
@Request.Url.AbsoluteUri
하지만 변한 것 같습니다. asp.net core 1.0에서 어떻게 할 수 있습니까?
이전 버전의 asp.net에서는
@Request.Url.AbsoluteUri
하지만 변한 것 같습니다. asp.net core 1.0에서 어떻게 할 수 있습니까?
답변:
호스트와 경로를 별도로 가져와야합니다.
@Context.Request.Host@Context.Request.Path
@
두 줄 사이에 이것은 무엇입니까 ? 설명해 주 시겠어요?
@HttpContext
의 경우 @Context
. 부분보기가 @Context
작동합니다. 사용하는 것을 잊었습니까?
Url.Action("Action", null, null, Request.Url.Scheme);
stackoverflow.com/questions/434604/…
스키마, 호스트, 경로 및 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()
@using Microsoft.AspNetCore.Http.Extensions
다음 을 추가하면 작동합니다@Context.Request.GetDisplayUrl()
Suitable only for display. This format should not be used in HTTP headers or other HTTP operations.
기반으로 @tmg의 솔루션이 가장 좋다고 생각합니다 (아마도 자신의 확장 방법으로 래핑되어 있음).
이것은 .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);
}
httpContext
있습니까? 그것은 작동하지 않을 것입니다 Microsoft.AspNetCore.Http.HttpContext.Request
요청 에서 포트 번호를 얻으려면 Request.Host
AspNet Core 의 속성을 통해 액세스해야합니다 .
Request.Host
속성은, 대신, 호스트 도메인을 모두 보유하는 객체 단순히 문자열이 아니라 및 포트 번호를. 포트 번호가 URL에 구체적으로 기록 된 경우 (예 :) "https://example.com:8080/path/to/resource"
호출 Request.Host
하면 다음 과 같은 호스트 도메인과 포트 번호가 제공 "example.com:8080"
됩니다..
호스트 도메인의 값만 원하거나 포트 번호의 값만 원할 경우 해당 속성에 개별적으로 액세스 할 수 있습니다 (예 : Request.Host.Host
또는 Request.Host.Port
).
Razor 페이지 또는 PageModel 클래스에서 현재 URL을 가져 오는 깔끔한 방법이 있습니다. 그건:
Url.PageLink()
MVC가 아닌 "ASP.NET Core Razor 페이지 "를 의미했습니다 .
ASP.NET Core 면도기 페이지에 표준 URL 메타 태그를 인쇄하려는 경우이 방법을 사용합니다. 그러나 문제가 있습니다. 해당 페이지에 대한 올바른 URL이어야하는 URL을 제공합니다. 설명하겠습니다.
페이지에 대해 "id"라는 경로를 정의 했으므로 URL은 다음과 같아야합니다.
http://example.com/product?id=34
Url.PageLink ()는 위에 표시된대로 정확히 해당 URL을 제공합니다.
이제 사용자가 해당 URL에 추가 내용을 추가하면
http://example.com/product?id=34&somethingElse
그러면이 메서드에서 "somethingElse"를 얻을 수 없습니다. 이것이 바로 HTML 페이지에서 표준 URL 메타 태그를 인쇄하는 데 아주 좋은 이유입니다.