Po pierwsze, niektóre szybkie tło ... W ramach integracji z zewnętrznym dostawcą, mam aplikację internetową w języku C# .Net, która otrzymuje adres URL z wieloma informacjami w ciąg zapytania. Ten adres URL jest podpisany za pomocą skrótu MD5 i wspólnego tajnego klucza. Zasadniczo przeciągam ciąg zapytania, usuwam jego skrót, wykonuję swój skrót na pozostałym ciągu zapytania i upewniam się, że mój odpowiada temu, który został dostarczony.. Net Uri Kodowanie RFC 2396 kontra RFC 3986
mam pobierania URI w następujący sposób ...
Uri uriFromVendor = new Uri(Request.Url.ToString());
string queryFromVendor = uriFromVendor.Query.Substring(1); //Substring to remove question mark
Mój problem jest wynikające z ciągów zapytań, które zawierają znaki specjalne jak umlaut (U). Dostawca oblicza swój skrót na podstawie reprezentacji RFC 2396, która jest %FC
. Moja aplikacja C# .Net oblicza wartość hash na podstawie reprezentacji RFC 3986, która jest %C3%BC
. Nie trzeba dodawać, że nasze skróty nie pasują do siebie i wrzucam moje błędy.
Co dziwne, kod mówi, że powinien on być zgodny z RFC 2396, chyba że ustawiono inaczej dla RFC 3986, ale nie mam wpisu w moim pliku web.config
, który według nich jest wymagany dla tego zachowania.
Jak zmusić konstruktora Uri do korzystania z konwencji RFC 2396?
W przypadku niepowodzenia, czy istnieje prosty sposób na konwersję par oktetów RFC 3986 na oktety RFC 2396?
Nic wspólnego z twoim pytaniem, ale dlaczego tworzysz nowego Uri? Możesz po prostu zrobić 'string queryFromVendor = Request.Url.Query.Substring (1);' – magnattic
Z której wersji .NET korzystasz? –
Używam .Net 4.0. Co ciekawe, gdy próbowałem używać 'Request.Url.Query', umlaut przychodził jako'% ufffd', który jest znakiem . – Colin