Включить динамический URL в мой URL без использования строки запроса? - PullRequest
0 голосов
/ 19 января 2010

ASP.NET 3.5, IIS7

В Application_BeginRequest моего Global.asax мне нужно извлечь из URL запроса полностью отдельный URL, который был встроен в него без использования строки запроса .

Решение, которое я придумал, состояло в том, чтобы закодировать весь целевой URL в шестнадцатеричном формате, как если бы это был каталог, следующим образом:

http://localhost/687474703A...etc...732E6D7033/irrelevantFilename.txt

Это не работает для IIS7, чья реализация ASP.NET не допустит путь URL-адреса более 260 символов .

Мой код контролирует, как генерируется URL-адрес запроса и как он может встраивать туда целевой URL-адрес, но он не имеет никакого контроля над значением этого целевого URL-адреса (это сторонние URL-адреса).

Как лучше добавить этот целевой URL в URL-адрес моего запроса?

1 Ответ

2 голосов
/ 19 января 2010

Вы можете кодировать его URL или, альтернативно, кодировать base-64. Оба обычно более компактны, чем шестнадцатеричное кодирование.

Примечание. Если длина URL превышает 200 символов, ограничение в 260 символов будет проблемой, несмотря ни на что. И если URL длиннее 260 символов ... ну, вы можете сделать математику: -)

Я не совсем понимаю, зачем вам нужен отдельный файл потом. Вы можете использовать обработчик 404 или просто анализировать прямо перед каждым запросом.

Кстати: если у вас есть опция, вам, вероятно, лучше встроить URL-адрес с помощью файла cookie или в качестве аргумента POST. Если это не вариант, вы также можете рассмотреть возможность использования службы сокращения URL-адресов, например http://bit.ly/ и т. Д. Эти URL-адреса действительно короткие. Все зависит от того, откуда приходят URL-адреса. Если у вас есть контроль над созданием этих URL-адресов, почему бы просто не дать каждому из них короткий идентификатор, сохранить их в таблице и найти их при «разборе» URL-адреса?

...