2010-05-27 4 views
0

Я разработал класс IHttpHandler, и я настроил его как verb="*" path="*", поэтому я обрабатываю весь запрос с ним, пытаясь создать собственную реализацию REST для тестового веб-сайта, генерирует html динамически.Проблема с IHttpHandler и относительными URL-адресами

Итак, когда приходит запрос на получение файла .css, я должен сделать что-то вроде context.Response.WriteFile(Server.MapPath(url)) ... то же самое для фотографий и т. Д., Я должен сам все откликнуться.

Моя основная проблема, когда я помещаю относительные URL-адреса в якорях; например, у меня есть главная страница со ссылкой, например, <a href="page1">Go to Page 1</a>, а в Page 1 У меня есть еще одна ссылка <a href="page2">Go to Page 2</a>. Страница 1 и 2 должны быть на том же уровне (и http://host/page2, но когда я нажимаю «Перейти на страницу 2», я получил этот URL-адрес в обработчике: ~/page1/~/page2 ... что такое боль, потому что я должен сделать url = url.SubString (url.LastIndexOf ('~')) для очистки, хотя я чувствую, что нет ничего плохого, и это поведение абсолютно нормально.

Прямо сейчас, я могу справиться с этим, но я думаю что в будущем это вызовет у меня головную боль. Я попытался установить все ссылки с абсолютными URL-адресами, используя информацию context.Request.Url, но это также боль: D, поэтому я хотел бы знать, есть ли более приятные способ делать такие вещи.

Не стесняйтесь давать мне довольно очевидную ответственность потому что я довольно новичок в веб-разработке и, вероятно, я пропускаю что-то основное о URL-адресах, Http и так далее.

Заранее благодарен.

+0

Является ли URL-переменная такой же, как context.Request.Url? – Sijin

+0

переменная url использует, чтобы содержать context.Request.AbsoluteApplicationPath (я точно не помню имя этого свойства) – vtortola

ответ

2

Прежде всего, я хотел бы взглянуть на выходной HTML, переданный в браузер, и, в частности, на ссылки, которые вы описываете.

Вы говорите, что ссылка <a href="page2">Go to Page 2</a>, но в соответствии с вашим результатом я бы предположил, что это больше похоже на <a href="~/page2">Go to Page 2</a>. Вы можете подтвердить это, разместив bracepoint в обработчике, и когда он запускает с «~/page1/~/page2», посмотрите в адресной строке вашего браузера, и он должен сказать что-то вроде «http://www.example.com/page1/~/page2 "

Сначала вы должны посмотреть на код, генерирующий ссылку. Если он генерируется из какого-либо вызова функции, убедитесь, что вы получили веб-адрес, а не адрес сценария.

В любом случае эти типы ссылок, которые переключаются между страницами первого уровня, должны начинаться с символа «/», указывающего, что их местоположение относится к корню вашего сайта, а не к текущей отображаемой странице.