Udostępnij za pośrednictwem


<httpListener> , element (ustawienia sieci)

Dostosowuje parametry używane przez klasę HttpListener .

<Konfiguracji>
  <system.net>
    <Ustawienia>
      <httpListener>

Składnia

<httpListener  
  unescapeRequestUrl="true|false"  
/>  

Typ

Atrybuty i elementy

W poniższych sekcjach opisano atrybuty, elementy podrzędne i elementy nadrzędne.

Atrybuty

Atrybut Opis
Unescaperequesturl Wartość logiczna wskazująca, czy HttpListener wystąpienie używa nieprzetworzonego identyfikatora URI, a nie przekonwertowanego identyfikatora URI.

Elementy podrzędne

Brak.

Elementy nadrzędne

Element Opis
ustawienia Konfiguruje podstawowe opcje sieci dla System.Net przestrzeni nazw.

Uwagi

Atrybut unescapeRequestUrl wskazuje, czy HttpListener używa nieprzetworzonego identyfikatora URI zamiast przekonwertowanego identyfikatora URI, w którym są konwertowane wartości zakodowane procentowo, a inne kroki normalizacji są wykonywane.

HttpListener Gdy wystąpienie odbiera żądanie za pośrednictwem http.sys usługi, tworzy wystąpienie ciągu identyfikatora URI dostarczonego przez http.sysusługę i uwidacznia je jako HttpListenerRequest.Url właściwość.

Usługa http.sys uwidacznia dwa ciągi identyfikatora URI żądania:

  • Identyfikator URI nieprzetworzonego

  • Przekonwertowany identyfikator URI

Pierwotny identyfikator URI jest System.Uri podany w wierszu żądania żądania HTTP:

GET /path/

Host: www.contoso.com

Nieprzetworzonego identyfikatora URI podanego dla http.sys powyższego żądania to "/path/". Reprezentuje to ciąg po czasowniku HTTP, który został wysłany przez sieć.

Usługa http.sys tworzy przekonwertowany identyfikator URI z informacji podanych w żądaniu przy użyciu identyfikatora URI podanego w wierszu żądania HTTP i nagłówka hosta w celu określenia serwera pochodzenia, do którego należy przesłać żądanie. Odbywa się to przez porównanie informacji z żądania z zestawem zarejestrowanych prefiksów identyfikatorów URI. Dokumentacja zestawu SDK serwera HTTP odnosi się do tego przekonwertowanego identyfikatora URI jako struktury HTTP_COOKED_URL.

Aby można było porównać żądanie z zarejestrowanymi prefiksami identyfikatorów URI, należy wykonać normalizację żądania. Dla przykładu powyżej przekonwertowanego identyfikatora URI będzie następujący:

http://www.contoso.com/path/

Usługa http.sys łączy Uri.Host wartość właściwości i ciąg w wierszu żądania, aby utworzyć przekonwertowany identyfikator URI. Ponadto http.sys klasa System.Uri wykonuje również następujące czynności:

  • Usuwa wszystkie wartości zakodowane procentowo.

  • Konwertuje znaki niekodowane procentowo na reprezentację znaków UTF-16. Należy pamiętać, że znaki UTF-8 i ANSI/DBCS są obsługiwane, a także znaki Unicode (kodowanie Unicode przy użyciu formatu %uXXXX).

  • Wykonuje inne kroki normalizacji, takie jak kompresja ścieżki.

Ponieważ żądanie nie zawiera żadnych informacji o kodowaniu używanym dla wartości zakodowanych procentowo, może nie być możliwe określenie poprawnego kodowania tylko przez przeanalizowanie wartości zakodowanych procentowo.

W związku z tym http.sys udostępnia dwa klucze rejestru do modyfikowania procesu:

Klucz rejestru Wartość domyślna Opis
EnableNonUTF8 1 Jeśli zero, http.sys akceptuje tylko adresy URL zakodowane w formacie UTF-8.

Jeśli nie ma wartości zero, http.sys akceptuje również adresy URL zakodowane w formacie ANSI lub DBCS w żądaniach.
FavorUTF8 1 Jeśli nie ma wartości zero, http.sys zawsze próbuje zdekodować adres URL jako utF-8. Jeśli konwersja zakończy się niepowodzeniem, a funkcja EnableNonUTF8 nie jest zerowa, Http.sys następnie spróbuje zdekodować go jako ANSI lub DBCS.

Jeśli zero (i EnableNonUTF8 jest niezerowe), http.sys próbuje zdekodować go jako ANSI lub DBCS; jeśli to nie powiedzie się, spróbuje konwersji UTF-8.

Gdy HttpListener odbiera żądanie, używa przekonwertowanego identyfikatora URI jako http.sys danych wejściowych Url do właściwości.

Istnieje potrzeba obsługi znaków oprócz znaków i liczb w identyfikatorach URI. Przykładem jest następujący identyfikator URI, który służy do pobierania informacji o kliencie dla numeru klienta "1/3812":

http://www.contoso.com/Customer('1%2F3812')/

Zanotuj ukośnik zakodowany procentowo w identyfikatorze URI (%2F). Jest to konieczne, ponieważ w tym przypadku znak ukośnika reprezentuje dane, a nie ogranicznik ścieżki.

Przekazanie ciągu do konstruktora identyfikatora URI doprowadzi do następującego identyfikatora URI:

http://www.contoso.com/Customer('1/3812')/

Podzielenie ścieżki na jej segmenty spowodowałoby następujące elementy:

Customer('1

3812')

Nie jest to intencja nadawcy żądania.

Jeśli atrybut unescapeRequestUrl ma wartość false, wówczas gdy HttpListener odbiera żądanie, używa nieprzetworzonego identyfikatora URI zamiast przekonwertowanego identyfikatora URI z http.sys jako danych wejściowych do Url właściwości.

Wartość domyślna atrybutu unescapeRequestUrl ma wartość true.

Właściwość UnescapeRequestUrl może służyć do pobierania bieżącej wartości atrybutu unescapeRequestUrl z odpowiednich plików konfiguracji.

Przykład

W poniższym przykładzie pokazano, jak skonfigurować klasę po odebraniu HttpListener żądania użycia nieprzetworzonego identyfikatora URI zamiast przekonwertowanego identyfikatora URI jako http.sys danych wejściowych do Url właściwości.

<configuration>  
  <system.net>  
    <settings>  
      <httpListener  
        unescapeRequestUrl="false"  
      />  
    </settings>  
  </system.net>  
</configuration>  

Informacje o elementach

Przestrzeń nazw: System.Net

Zobacz też