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:
- apiUri = ‘http://api.eve-online.com/‘ (System.Uri Object)
- method.Path = ‘/char/SkillIntraining.xml.aspx’ (string)
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
- apiUri = ‘http://www.r-s.co.uk/eproxy.php‘ (System.Uri Object)
- method.Path = ‘/char/SkillIntraining.xml.aspx’ (string)
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.
Don’t use the Uri object, use a UriBuilder – it copes way better with missing slashes
So
works as expected and produces http://www.r-s.co.uk/eproxy.php/char/SkillIntraining.xml.aspx