Uri.DnsSafeHost 속성

정의

필요한 경우 이스케이프 해제된 후 호스트 이름을 가져오는 것이 DNS 확인에 사용하기에 안전합니다.

public:
 property System::String ^ DnsSafeHost { System::String ^ get(); };
public string DnsSafeHost { get; }
member this.DnsSafeHost : string
Public ReadOnly Property DnsSafeHost As String

속성 값

String

DNS 확인에 적합한 형식의 URI의 호스트 부분입니다. 또는 원래 호스트 문자열(이미 해결에 적합한 경우)입니다.

예외

이 인스턴스가 상대 URI를 나타내고 이 속성이 절대 URI에만 유효한 경우

예제

다음 예제에서는 문자열에서 Uri 인스턴스를 만듭니다. 반환된 값 Host과 URI에 지정된 호스트 이름 또는 주소를 반환하는 값과 반환 DnsSafeHost된 값 간의 차이를 보여 줍니다. 이 값은 DNS 확인에 사용하기에 안전한 주소를 반환합니다.

// Create new Uri using a string address.         
Uri^ address = gcnew Uri( "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm" );

// Make the address DNS safe. 
// The following outputs "[fe80::200:39ff:fe36:1a2d]".
Console::WriteLine( address->Host );

// The following outputs "fe80::200:39ff:fe36:1a2d%254".
Console::WriteLine( address->DnsSafeHost );
// Create new Uri using a string address.
Uri address = new Uri("http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm");

// Make the address DNS safe.

// The following outputs "[fe80::200:39ff:fe36:1a2d]".
Console.WriteLine(address.Host);

// The following outputs "fe80::200:39ff:fe36:1a2d%254".
Console.WriteLine(address.DnsSafeHost);
// Create new Uri using a string address.
let address = Uri "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm"

// Make the address DNS safe.

// The following outputs "[fe80::200:39ff:fe36:1a2d]".
printfn $"{address.Host}"

// The following outputs "fe80::200:39ff:fe36:1a2d%254".
printfn $"{address.DnsSafeHost}"
    ' Create new Uri using a string address.         
    Dim address As New Uri("http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm")
    
    ' Make the address DNS safe. 
    ' The following outputs "[fe80::200:39ff:fe36:1a2d]".
    Console.WriteLine(address.Host)
    
    ' The following outputs "fe80::200:39ff:fe36:1a2d%254".
    Console.WriteLine(address.DnsSafeHost)

End Sub

설명에 설명된 대로 호스트 이름을 확인하기 전에 이스케이프를 해제합니다. 이 메서드를 UnescapeDataString 사용하여 호스트 이름을 이스케이프 해제할 수 있으며 메서드를 GetHostEntry 호출하여 해결할 수 있습니다.

설명

IPv6 주소의 경우 대괄호([])가 제거되고 ScopeId 이 인스턴스가 생성될 때 지정된 경우 속성이 설정됩니다.

이스케이프된 문자열을 사용하여 이 인스턴스(예 "http://[fe80::200:39ff:fe36:1a2d%254]/temp/example.htm": )를 생성한 경우 DnsSafeHost는 이스케이프된 문자열을 반환합니다. DNS 확인을 위해 해당 문자열을 사용하기 전에 반환 DnsSafeHost 된 이스케이프된 문자열을 이스케이프 해제합니다(예제 참조). 이 인스턴스를 생성하는 데 잘못된 이스케이프되지 않은 문자열을 사용한 경우(예: "http://[fe80::200:39ff:fe36:1a2d%4]/temp/example.htm") DnsSafeHost는 이스케이프되지 않은 문자열을 반환합니다.

DnsSafeHost 속성은 이 항목의 뒷부분에서 설명한 대로 .NET Framework 앱의 구성 설정에 따라 달라집니다. IdnHost 항상 DNS로부터 안전하게 보호되므로 이 속성은 사용 DnsSafeHostIdnHost 대신 기본 설정으로 제공됩니다.

이 속성은 DnsSafeHost rfC 3987을 기반으로 하는 IRI(International Resource Identifier) 지원을 제공하기 위해 .NET Framework v3.5, 3.0 SP1 및 2.0 SP1에서 확장되었습니다. 그러나 이전 버전과의 애플리케이션 호환성을 보장하려면 특히 .NET Framework 앱에서 사용하도록 설정해야 합니다. IRI에 대한 지원을 사용하도록 설정하려면 다음 두 가지 변경이 필요합니다.

  1. .NET Framework 2.0 디렉터리 아래의 machine.config파일에 다음 줄을 추가합니다.

    \<section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  2. 도메인 이름에 IDN(Internationalized Domain Name) 구문 분석을 적용할지 여부와 IRI 구문 분석 규칙을 적용할지 여부를 지정합니다. 이 작업은 machine.config 또는 app.config 파일에서 수행할 수 있습니다. 예를 들어 다음을 추가합니다.

    <configuration>
      <uri>
        <idn enabled="All" />
        <iriParsing enabled="true" />
      </uri>
    </configuration>
    

IDN을 사용하도록 설정하면 도메인 이름의 모든 유니코드 레이블이 해당하는 Punycode 레이블로 변환됩니다. Punycode 이름에는 ASCII 문자만 사용되며 항상 xn-- 접두사로 시작합니다. 대부분의 DNS 서버는 ASCII 문자만 지원하므로(RFC 3940 참조) 이렇게 해야 인터넷에서 기존 DNS 서버를 지원할 수 있습니다.

IDN을 사용하도록 설정하면 속성 값에만 영향을 줍니다 DnsSafeHost .

사용되는 DNS 서버에 따라 IDN에 사용할 수 있는 세 가지 값이 있습니다.

  • idn enabled = All

    이 값은 모든 유니코드 도메인 이름을 해당하는 Punycode 항목(IDN 이름)으로 변환합니다.

  • idn enabled = AllExceptIntranet

    이 값은 해당하는 Punycode 항목(IDN 이름)을 사용하도록 모든 외부 유니코드 도메인 이름을 변환합니다. 이 경우 로컬 인트라넷에 있는 국가별 이름을 처리하기 위해 인트라넷에 사용되는 DNS 서버가 유니코드 이름 확인을 지원해야 합니다.

  • idn enabled = None

    이 값은 Punycode를 사용하도록 어떠한 유니코드 도메인 이름도 변환하지 않습니다. .NET Framework 2.0 동작과 일치하는 기본값입니다.

IRI 구문 분석(iriParsing enabled = true)을 사용하도록 설정하면 RFC 3987의 IRI 규칙에 따라 문자가 정규화되고 검사됩니다. 기본값은 false RFC 2396 및 RFC 2732(IPv6 리터럴의 경우)에 따라 문자를 정규화하고 검사합니다.

IRI 지원에 대한 자세한 내용은 클래스의 설명 섹션을 Uri 참조하세요.

적용 대상