Проблема с IHttpHandler и относительными URL-адресами

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

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

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

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

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

Заранее спасибо и с уважением.


person vtortola    schedule 27.05.2010    source источник
comment
Является ли переменная URL такой же, как context.Request.Url?   -  person Sijin    schedule 27.05.2010
comment
переменная url используется для содержания context.Request.AbsoluteApplicationPath (я точно не помню имя этого свойства)   -  person vtortola    schedule 27.05.2010


Ответы (1)


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

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

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

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

person hultqvist    schedule 18.12.2010