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

Параметр относительного URI

Я хотел бы извлечь строку запроса и фрагмент из относительного URI, то есть URI без какой-либо информации о схеме или хосте.

Есть ли более элегантный способ сделать это, чем превратить его в абсолютный URI с поддельным именем хоста?

var relativeUri = "/dir1/dir2/file?a=b&c=d#fragment";
var uri = new Uri(new Uri("http://example.com"), relativeUri);
var path = Uri.UnescapeDataString(String.Concat(uri.Segments));
var query = uri.Query;
var fragment = uri.Fragment;
// path = "/dir1/dir2/file", query = "?a=b&c=d", fragment = "#fragment"
4b9b3361

Ответ 1

Хотя вы можете создать Uri без хост-части, большинство его свойств затем выведут InvalidOperationException ( "Эта операция не поддерживается для относительного URI" ), поскольку эти свойства полагаются на абсолютный Uri.

HttpUtility.ParseQueryString() действительно не поможет здесь, поскольку он работает только с частью запроса Uri, которую вы не можете получить, потому что у вас нет абсолютного Uri.

Итак, хотя это может показаться хриплым, я думаю, что конструктор new Uri(baseUri, relativeUri) делает именно то, что вы хотите. Кажется, я не могу найти лучший или более чистый способ сделать то же самое.