ProgramingTip

URL에서 포트 번호를 제거하는 방법

bestdevel 2020. 12. 2. 21:38
반응형

URL에서 포트 번호를 제거하는 방법


다음 코드 스 니펫이 있습니다.

string tmp = String.Format("<SCRIPT FOR='window' EVENT='onload' LANGUAGE='JavaScript'>javascript:window.open('{0}');</SCRIPT>", url);

ClientScript.RegisterClientScriptBlock(this.GetType(), "NewWindow", tmp);

이 코드에 의해 생성 된 URL에는 포트 번호가 포함되어있어 웹 사이트에서 포트 80을 사용하기 때문에 발생하는 것입니다.이 코드에서는 웹 사이트의 가상 디렉터리에서 페이지를로드합니다. 이 코드로 생성 된 URL 호스트에서 포트 번호를 제한하는 방법에 대한 아이디어가 있습니까?


Uri.GetComponents방법을 사용하십시오 . 포트 구성 요소를 제거하려는 다음과 같이 다른 모든 구성 요소를 결합해야합니다.

var uri = new Uri( "http://www.example.com:80/dir/?query=test" );
var clean = uri.GetComponents( UriComponents.Scheme | 
                               UriComponents.Host | 
                               UriComponents.PathAndQuery, 
                               UriFormat.UriEscaped );

편집 : 더 나은 방법을 찾았습니다.

var clean = uri.GetComponents( UriComponents.AbsoluteUri & ~UriComponents.Port,
                               UriFormat.UriEscaped );

UriComponents.AbsoluteUri모든 구성 요소를 보존 & ~UriComponents.Port포트만 제외합니다.


UriBuilder u1 = new UriBuilder( "http://www.example.com:80/dir/?query=test" );
u1.Port = -1;
string clean = u1.Uri.ToString();

Port속성을 -1on으로 설정하면 UriBuilder명시 적 포트가 제거되고 프로토콜 체계에 대한 기본 포트 값이 암시 적으로 사용됩니다.


Ian Flynn 아이디어 에 기반한보다 일반적인 솔루션 (http, https, ftp ...와 함께 작동) . 이 방법은 사용자 지정 포트가있는 경우 제거하지 않습니다. 사용자 지정 포트는 프로토콜에 따라 자동으로 정의됩니다.

var uriBuilder = new UriBuilder("http://www.google.fr/");
if (uriBuilder.Uri.IsDefaultPort)
{
    uriBuilder.Port = -1;
}
return uriBuilder.Uri.AbsoluteUri;

이를 위해 System.Uri

사용합니다 . 시도하지 않았지만 ToString 이 실제로 원하는 것을 출력하는 것 같습니다.

var url = new Uri("http://google.com:80/asd?qwe=asdff");
var cleanUrl = url.ToString();

그렇지 않은 경우 url운영 위원 의 구성 요소를 결합 하여 cleanUrl문자열 을 만들 수 있습니다 .


var url = "http://google.com:80/asd?qwe=zxc#asd";
var regex = new Regex(@":\d+");
var cleanUrl = regex.Replace(url, "");

솔루션 System.Uri도 가능하지만 더 부풀어 질 것입니다.


이를 위해 URIBuilder 의 속성사용할 수도 있습니다 . 원하는 방식으로 URL을 출력하는 속성이 있습니다.


알았어, 알아서 고마워 ... KISS 원칙을 사용했습니다 ...

string redirectstr = String.Format(
   "http://localhost/Gradebook/AcademicHonestyGrid.aspx?StudentID={0}&ClassSectionId={1}&uid={2}", 
   studid, 
   intSectionID, 
   HttpUtility.UrlEncode(encrypter.Encrypt(uinfo.ToXml())));

Response.Redirect(redirectstr );

내가하고있는 테스트 하네스에 잘 작동합니다.

참고 URL : https://stackoverflow.com/questions/2819336/how-to-remove-the-port-number-from-a-url-string

반응형