Объединение URI и путей
Я применяю ретро-приложение для использования PHP HTTP-прокси (для кеширования) вместо фактического сервера API, приложение в настоящее время объединяет URI сервера и путь с кодом:
methodUri = new Uri(apiUri, method.Path)
Где:
Результат вышеуказанного утверждения
"http://api.eve-online.com/char/SkillIntraining.xml.aspx" (System.Uri Object)
Чтобы использовать прокси-сервер PHP HTTP, запрос должен быть изменен следующим образом
Ожидаемый результат:
"http://www.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx" (System.Uri Object)
Однако выход я получаю:
"http://www.r-s.co.uk/char/SkillIntraining.xml.aspx" (System.Uri Object)
Я понимаю, что это правильная функциональность конструктора Uri (Uri, string), мой вопрос в том, что было бы лучшей функцией или конструктором для использования на своем месте для получения ожидаемого результата? Я попытался удалить ведущий "/" в методе. Пат, беря его с абсолютного пути на относительный путь, но это не помогло.
ПРИМЕЧАНИЕ. оба решения ниже работают, однако System.UriBuilder обеспечивает более надежный механизм объединения URI и путей, и в моем случае это привело к меньшему количеству изменений ресурсов, чем при использовании System.Uri. Если бы у меня был выбор, я бы поставил оба ответа как правильные.
Ответы
Ответ 1
Не используйте объект Uri, используйте UriBuilder - он лучше справляется с отсутствующими косыми чертами
Итак,
Uri apiUri = new Uri("http://www.r-s.co.uk/eproxy.php");
string methodPath = "/char/SkillIntraining.xml.aspx";
System.UriBuilder uriBuilder = new System.UriBuilder(apiUri);
uriBuilder.Path += methodPath;
Console.WriteLine(uriBuilder.Uri.ToString());
работает как ожидалось и производит http://www.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx
Ответ 2
Добавьте завершающий символ "/" в apiUri и удалите начальный "/" из метода. Путь:
Uri apiUri = new Uri("http://www.r-s.co.uk/eproxy.php/");
string path = "char/SkillIntraining.xml.aspx";
Uri uri = new Uri(apiUri, path);
Console.WriteLine(uri.ToString());
Напечатает:
http://www.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx