Работа с относительными URI - PullRequest
2 голосов
/ 12 июля 2010

У меня небольшая проблема с относительными URI

У меня есть простое приложение HttpListener, которое прослушивает данный префикс (в настоящее время это http://+:80/Temporary_Listen_Addresses/,, но это может быть любой другой допустимыйпрефикс).

Для любого данного запроса я пытаюсь определить, какой запрошенный URI относится к этому префиксу, поэтому, например, если кто-то запросил http://localhost/Temporary_Listen_Addresses/test.html, я хочу получить test.html.

Какой лучший способ сделать это?

Обновление: Метод MakeRelativeUri не работал для меня, так как он не знает об эквивалентных адресах.Например, следующее работает нормально при использовании «localhost»:

Uri baseUri = new Uri("http://localhost/Temporary_Listen_Addresses/");
Uri relative  = baseUri.MakeRelativeUri(uri);

Однако это не будет работать, если вы перейдете к http://127.0.0.1/ или http://machinename/ и т. Д ...

Ответы [ 3 ]

2 голосов
/ 12 июля 2010

Вы можете использовать метод MakeRelative в классе URI.

РЕДАКТИРОВАТЬ: Что вы можете сделать, если проблема связана с именем компьютера или частью URL-адреса, каждый раз создавая новый URL-адрес с одинаковыми правами доступа и используя путь только из существующих URI. Например, вы можете создать свой входной URI, выполнив что-то вроде:

UriBuilder b = new UriBuilder();
b.Path = input.Path; //this is just the path portion of the input URL.  
b.scheme = "http";
b.host = "localhost"; // fix the host so machine name isn't an issue

input = b.Uri;
URI relative = baseUri.MakeRelative(input);
1 голос
/ 14 апреля 2011

Вот действительно глупый способ сделать это, который работает:

    var relativeUri = context.Request.Url.AbsolutePath.
                      Substring(baseUri.AbsolutePath.Length);
0 голосов
/ 12 июля 2010

Вы можете получить из URL индекс последнего вхождения '/' и получить подстроку, которая начинается сразу после нее.

...