Jestem retro sylwetkę aplikację do korzystania z serwera proxy PHP HTTP (dla buforowania) zamiast rzeczywistego serwera API, aplikacja obecnie łączy serwer URI i ścieżki z kodem:Łączenie URI i ścieżki
methodUri = new Uri(apiUri, method.Path)
gdzie:
- apiUri = "http://api.eve-online.com/" (System.Uri Object)
- method.Path = „/ char/SK illIntraining.xml.aspx”(string)
Wynikiem powyższego stwierdzenia jest
"http://api.eve-online.com/char/SkillIntraining.xml.aspx" (System.Uri Object)
Aby użyć proxy PHP HTTP wniosek musiałby zostać zmieniony w następujący sposób
- apiUri = "http://www.r-s.co.uk/eproxy.php" (Obiekt System.Uri)
- method.Path = "/char/SkillIntraining.xml.aspx" (string)
Wyjście Spodziewałem się:
"http://www.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx" (System.Uri Object)
Jednak wyjście pojawia się:
"http://www.r-s.co.uk/char/SkillIntraining.xml.aspx" (System.Uri Object)
I Rozumiem, że jest to poprawna funkcja konstruktora Uri (Uri, string), moje pytanie brzmi, jaka byłaby lepsza funkcja lub konstruktor do użycia w tym miejscu, aby uzyskać oczekiwany wynik? Próbowałem usunąć wiodące "/" w method.Path biorąc je od absolutnej ścieżki do względnej ścieżki, ale to nie pomogło.
UWAGA: poniżej oba rozwiązania pracują, jednak System.UriBuilder zapewnia bardziej wydajny mechanizm łączenia URI i ścieżki, aw moim przypadku skutkowało mniejszymi zmianami zasobów niż przy użyciu System.Uri. Gdybym miał wybór, zaznaczę obie odpowiedzi jako prawidłowe.
Masz rację System.UriBuilder to bardziej niezawodny sposób budowania identyfikatorów URI, dziękuję –
Zwróć uwagę, że ścieżka będzie zakodowana w URL, więc jeśli dodawanie zawiera ciąg zapytania, znaki? i & zostaną zakodowane. słabość w opisywanej metodzie –
'UriBuilder' ma osobną właściwość Query dla ciągów zapytań, co jest zalecane, ponieważ poprawnie obsługuje kodowanie znaków dla tego przypadku użycia. –