2010-07-12 2 views
2

У меня возникли небольшие проблемы с относительным URIsРаботы с относительной URIs

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

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

Каков наилучший способ для этого?

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

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

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

ответ

2

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

EDIT: Что вы можете сделать, если проблема с именем или полномочиями в URL-адресе 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); 
+0

Это не совсем работа, как ожидается, - я буду вдаваться в подробности в моем вопросе. – Justin

0

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

1

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

var relativeUri = context.Request.Url.AbsolutePath. 
         Substring(baseUri.AbsolutePath.Length); 

 Смежные вопросы

  • Нет связанных вопросов^_^