[asp.net-core] asp.net Core 1.0에서 현재 URL을 보는 방법

이전 버전의 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&param2=b
        Request.GetUri(addQuery: false);
        //after >> https://localhost:44304/information/about

        //before >> https://localhost:44304/information/about?param1=a&param2=b
        new Uri("https://localhost:44304/information/about?param1=a&param2=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);
}