I am retro-fitting an application to make use of a PHP HTTP proxy (for caching) instead of the actual API server, the application currently combines the server URI and the path with the code:
methodUri = new Uri(apiUri, method.Path)
Where:
The result of the above statement is
"http://api.eve-online.com/char/SkillIntraining.xml.aspx" (System.Uri Object)
To use the PHP HTTP proxy the request would have to be changed as follows
The output I was expecting was:
"http://www.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx" (System.Uri Object)
However the output I get is:
"http://www.r-s.co.uk/char/SkillIntraining.xml.aspx" (System.Uri Object)
I understand that this is the correct functionality of the constructor Uri(Uri, string), my question is what would be a better function or constructor to use in its place to get the output I expect? I have tried removing the leading "/" in method.Path taking it from an absolute path to a relative path however that did not help.
NOTE: both solutions below do work, however System.UriBuilder provides a more robust mechanism for combining URI's and paths and in my case resulted in fewer changes to resources than using System.Uri. Had I the choice I would mark both answers as correct.
Combining multiple parts of a URL could be a little bit tricky. You can use the two-parameter constructor Uri(baseUri, relativeUri) , or you can use the Uri. TryCreate() utility function.
Using Path. Combine() will help prevent you from missing a \ or having two \\ by mistake.
Don't use the Uri object, use a UriBuilder - it copes way better with missing slashes
So
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());
works as expected and produces http://www.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx
Add a trailing "/" to apiUri, and remove the leading "/" from method.Path:
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());
Will print:
http://www.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With