it-swarm.dev

asp.net 코어 1.0보기에서 현재 URL을 얻는 방법

이전 버전의 asp.net에서는

@Request.Url.AbsoluteUri

그러나 그것이 바뀐 것 같습니다. 어떻게 asp.net 코어 1.0에서 그렇게 할 수 있을까요?

69
oneNiceFriend

호스트와 경로를 별도로 확보해야합니다.

 @[email protected]
86
Clint B

Scheme, Host, 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}")
88
tmg

Request의 확장 메소드를 사용할 수 있습니다.

Request.GetDisplayUrl()
62
AlexBar

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이 반환됩니다.

10
Dhanuka777
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);
}
6
Sergey

이것은 .net core 1.0에서 Microsoft.AspNetCore.Http.Extensions로 항상 가능했으며, 전체 URL을 얻기 위해 HttpRequest에 확장자를 추가했습니다. GetEncodedUrl .

예 : 면도기보기에서 :

@using Microsoft.AspNetCore.Http.Extensions
...
<a href="@Context.Request.GetEncodedUrl()">Link to myself</a>

2.0 이후에는 상대 경로와 쿼리도 있습니다. GetEncodedPathAndQuery .

5
mcNux

요청에서 포트 번호 를 얻으려면 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).

5
Hallmanac

Microsoft.AspNetCore.Http.Extensions namespace의이 확장 메서드를 사용하는 것을 고려할 수 있습니다.

@Context.Request.GetDisplayUrl()

일부 프로젝트의 경우 더 유연한 솔루션을 선호합니다. 두 가지 확장 방법이 있습니다.

1) 첫 번째 메소드는 들어오는 요청 데이터에서 Uri 오브젝트를 작성합니다 (선택적 매개 변수를 통해 일부 변형이 있음). 2) 두 번째 메서드는 Uri object를 받고 다음 형식 (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
1
user3172616

받아 들여진 응답은 나를 도와 주었고 @padigan에서 주석을 달았지만 나에게 맞는 쿼리 문자열 매개 변수를 포함 시키려면 다음을 시도하십시오.

@[email protected]()

GetEncodedPathAndQuery () 메서드를 사용하려면 @using Microsoft.AspNetCore.Http.Extensions를 뷰에 추가해야합니다.

0
Christopher King