<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.sys
usł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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla