C #에서 현재 페이지의 전체 URL을 얻는 방법


163

사용자 정의 컨트롤에서 온 페이지의 전체 URL을 얻을 수 있어야합니다. 여러 요청 변수를 함께 연결하는 것입니까? 그렇다면 어느 것입니까? 아니면 더 간단한 방법이 있습니까?


6
loadbalanced webfarm에서 누군가에 ... 나타납니다이 System.Url을 사용하는 포트 번호주의 : stackoverflow.com/questions/7674850/...을
felickz

답변:


155

나는 일반적으로 Request.Url.ToString()연결을 요구하지 않고 전체 URL (querystring 포함)을 얻는 데 사용합니다.


2
URL에 '#'이 포함 된 경우 # 뒤의 모든 문자가 포함되지 않습니다.
Krunal Sisodiya

5
@ KrunalSisodiya URL의 해시가 서버로 전송되었다고 생각하지 않지만 잘못 될 수 있습니다.
트래비스

1
Request.Url.ToString()queryString을 포함하지 않습니다.
Yogesh Patel

320

이 유형의 정보에 대해 일반적으로 참조하는 목록은 다음과 같습니다.

Request.ApplicationPath :   /virtual_dir
Request.CurrentExecutionFilePath :  /virtual_dir/webapp/page.aspx
Request.FilePath :  /virtual_dir/webapp/page.aspx
Request.Path :  /virtual_dir/webapp/page.aspx
Request.PhysicalApplicationPath :   d:\Inetpub\wwwroot\virtual_dir\
Request.QueryString :   /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.AbsolutePath :  /virtual_dir/webapp/page.aspx
Request.Url.AbsoluteUri :   http://localhost:2000/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Host :  localhost
Request.Url.Authority : localhost:80
Request.Url.LocalPath : /virtual_dir/webapp/page.aspx
Request.Url.PathAndQuery :  /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Port :  80
Request.Url.Query : ?q=qvalue
Request.Url.Scheme :    http
Request.Url.Segments :  /
    virtual_dir/
    webapp/
    page.aspx

잘만되면 이것이 유용 할 것입니다!


1
1) Request.RawUrl도 있습니다. 2) Request.Url은 '매우 잘못된 요청 경로'에 대해 예외를 throw 할 수 있습니다.
user2864740

매우 유용한 답변이지만 혼동을 피하기 위해 포트 번호가 일관성이 없어야합니다 (예를 들어 모든 요청이 동일한 요청에 있다고 가정 할 경우 (예 : 권한 및 포트는 포트 80을 의미하지만 AbsoluteUri는 포트 2000을 포함 함))
Young Bob

Request.QueryString반환 q=qvalue
마르셀

74
Request.Url.AbsoluteUri

이 속성은 간결한 호출로 필요한 모든 것을 수행합니다.


6
+1. 이것이 가장 좋은 대답입니다. Request.Url.ToString ()보다 선호되어야합니다.
Todd Menier

10

들어 ASP.NET Core당신이해야합니다 그것을 밖으로 철자 :

@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")

또는 뷰에 using 문을 추가 할 수 있습니다.

@using Microsoft.AspNetCore.Http.Extensions

그때

@Context.Request.GetDisplayUrl()

_ViewImports.cshtml더 나은 곳이 될 수있다@using


1
감사. 도움이되었습니다!
FlyingV 2019


9

http에서 querystring까지 모든 URL로 전체 URL이 필요한 경우 다음 변수를 연결해야합니다.

Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME") 
Request.ServerVariables("SCRIPT_NAME") 
Request.ServerVariables("QUERY_STRING")

2
이것은 비표준 포트를 고려하지 않습니다 (예 : http에 포트 80을 사용하지 않음)
Spongeboy

1
포트 감지를 위해 Request.ServerVariables ( "SERVER_PORT")를 사용할 수 있습니다!
armen

1
이 답변은 VB.Net 구문을 사용합니다. C #에서는 예를 들어 Request.ServerVariables [ "HTTPS"]를 사용하십시오.
jaycer 2016 년

7

( MSDN 에 따라 ) Request.Url.OriginalString보다 사용하는 것이 좋습니다.Request.Url.ToString()


원래 문자열이 실제로 필요한 경우에만 더 좋습니다.
Dirk

위의 MSDN 링크에서 : "ToString 메서드에 의해 반환 된 문자열에는 컨트롤 문자가 포함되어 콘솔 응용 프로그램의 상태를 손상시킬 수 있습니다. UriFormat.SafeUnescaped 형식과 함께 GetComponents 메서드를 사용하여 반환 된 문자열에서 컨트롤 문자를 제거 할 수 있습니다. "
Eni

정확히, 그것은와 관련이 없습니다 OriginalString.
Dirk

5

고마워, 나는 내 특정 요구에 대한 @Christian과 @Jonathan의 대답을 조합하여 사용했습니다.

"http://" + Request.ServerVariables["SERVER_NAME"] +  Request.RawUrl.ToString()

보안 http에 대해 걱정할 필요가 없으며 servername 변수가 필요했으며 RawUrl은 도메인 이름의 경로를 처리하고 존재하는 경우 쿼리 문자열을 포함합니다.


2
또한 URL 매핑을 사용하는 경우 RawUrl은 Request.Url과 달리 매핑되지 않은 원래 요청 URL을 나타냅니다.
harpo

SERVER_NAME은 종종 클라이언트가 사용하는 "실제"URL을 반환하지 않습니다. HTTP_HOST는 직접 파헤 치면 더 좋은 형태 일 것입니다. 또한 간단한 HTTP-to-another-port도 빠졌습니다.
user2864740

1

포트 번호도 필요한 경우 사용할 수 있습니다

Request.Url.Authority

예:

string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();

if (Request.ServerVariables["HTTPS"] == "on")
{
    url = "https://" + url;
}
else 
{
    url = "http://" + url;
}

1

다음을 시도하십시오-

var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.