Подтвердить что ты не робот

Объединение 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. Если бы у меня был выбор, я бы поставил оба ответа как правильные.

4b9b3361

Ответ 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