programing

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

muds 2023. 6. 20. 21:51
반응형

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 문자열에서 포트 번호를 억제하는 방법에 대한 아이디어가 있습니까?

메소드를 사용합니다.포트 구성 요소를 제거하려면 다음과 같은 다른 구성 요소를 모두 결합해야 합니다.

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에 대한 재산.-1UriBuilder명시적 포트를 제거하고 프로토콜 체계에 대한 기본 포트 값을 암시적으로 사용합니다.

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

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

2021년 4월 업데이트

최신 .NET 버전에서는Uri.AbsoluteUri에서는 기본 포트를 제거하고 기본적으로 사용자 지정 포트를 유지합니다.위의 코드 스니펫은 다음과 같습니다.

    var uriBuilder = new UriBuilder("http://www.google.fr/");
    return uriBuilder.Uri.AbsoluteUri;

는 시스템을 사용할 것입니다.를 위한 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를 사용하여 포트 값을 -1로 설정할 수 있습니다.

코드는 다음과 같습니다.

Uri tmpUri = new Uri("http://LocalHost:443/Account/Index");
UriBuilder builder = new UriBuilder(tmpUri);
builder.Port = -1;
Uri newUri = builder.Uri;

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

알았어요, 고마워요 키스의 원리를 이용해서...

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

반응형