Метод Uri.TryCreate
обрабатывает два из трех ваших случаев так, как вы хотите:
let ok, url = Uri.TryCreate(Uri("https://example.com/xyz"), "/abc")
// https://example.com/abc
let ok, url = Uri.TryCreate(Uri("https://example.com/xyz"), "another.com")
// https://example.com/another.com
let ok, url = Uri.TryCreate(Uri("https://example.com/xyz"), "#def")
// https://example.com/xyz#def
Во втором случае another.com
просто интерпретируется как имя файла, а не как имя домена. Это вполне разумно, потому что дело неоднозначное.
Я не думаю, что есть способ автоматически обработать второй случай так, как вы хотите, используя встроенный метод. NET. Для этого вам, вероятно, потребуется реализовать логику c. Это зависит от того, что именно вы хотите - если вы хотите превратить <domain>.<tld>
в https://<domain>.<tld>
, вы можете проверить, соответствует ли строка шаблону <domain>.<tld>
(и убедиться, что <tld>
действительно, чтобы избежать превращения index.html
в https://index.html
) и затем сделайте преобразование самостоятельно.