| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Обработка HTTP запроса |
| Автор: Tomcat 19.5.2005, 15:25 |
| Пишем CMS. Необходимо сделать так, чтобы доступ к контенту для пользователя происходил прозрачно. Допустим имеется некоторый документ с именем document. Предполагается, что пользователь обращается к нему с помощью URL: http://someserver/somevirdir/document.aspx В реале страницы document.aspx не существует: global.asax, поймав такой запрос, редиректит его на страницу, допустим, content.aspx, которая в свою очередь разбирает запрашиваемый ресурс, производит поиск его в базе данных, получает содержимое и возвращает обратно пользователю. Вопрос в том, как сделать тоже самое для получения, например, картинки? В этом случае пользователь использует что-то типа: http://someserver/somevirdir/picture.jpg Картинка тоже хранитсся в базе, но злой IIS ищет этот ресурс физически, и возвращает пользователю 404-ю ошибку. До global.asax дело даже не доходит. Вот как это можно реализовать средствами чисто ASP.NET? А если никак, то может что-нить можно сделать с IIS? Короче, КАК??? |
| Автор: mr.DUDA 19.5.2005, 20:39 |
| Сделай так. В global.asax.cs пропиши проверку запроса на предмет того, файл какого типа запрашивается. Если это твоя картинка, тогда используй текущую сессию (или параметры запроса, как там у тебя задумано) для получения картинки из базы данных, и возвращай стрим с картинкой. 404-я ошибка возвращается, если ресурс с данным именем не найден в указанном виртуальном каталоге (или алиасе). Значит, ты можешь например создать global.asax прямо в той директории, где находится default.aspx, и в этой странице прописать ссылку на картинку, расположенную в той же директории и имеющую имя, которое твой global.asax.cs распознает, как я написал ранее. |
| Автор: Tomcat 20.5.2005, 12:29 | ||
Так все это понятно... Просто дело в том, что если запрашиваемый ресурс является, например, картинкой (т.е. с каким-нибудь jpg-расширением) у global.asax.cs не вызываются обработчики вообще. |
| Автор: Tomcat 23.5.2005, 10:37 |
| Мда, видимо не судьба. |
| Автор: arilou 23.5.2005, 13:37 |
| Tomcat До global.asax дело не доходит, потому что расширение файла .jpg не связано с ISAPI расширением aspnet_isapi.dll. Попробуй его добавить в Manage my computer->Internet Informarion Services->Default web site->Your virtual folder->Properties->Home directory->Configure. Там все просто, думаю, у тебя получится. После этих манипуляций должен будет выполняться Global.asax. |
| Автор: Tomcat 24.5.2005, 09:55 | ||
Вариант, конечно. Только в системе будут хранится файлы различного содержания. Одних толькокартинок с различными расширениями сколько. А еще есть pdf-ы, doc-и, zip-ы, rar-ы и т.п. Их всех придется прописать в насторойках для этой виртуальной директории, но все возможные расширения не предусмотришь. Сейчас ковырялся в настройках виртуальной директории... А что если пойти на такую хитрость: в IIS настроить страницу переадресации в случае ошибки 404 на свою aspx-страницу, а не стандартную. Изврат, конечно... Но... Вы что думаете? |
| Автор: arilou 24.5.2005, 11:31 |
| Понимаешь, тот подход, что я предложил уже используется народом для решения типовой задачи (такой как у тебя). Есть еще один вариант: использовать ASPX-страницу для генерации image'а. Конечно, в дизайнере ты ничего не увидишь, но зато в рантайме все будет работать. Если интересно, могу привести код на VB.NET |
| Автор: Tomcat 24.5.2005, 11:47 | ||
Так вариант с генерацией картинки у меня и используется. Есть aspx-страница, которая берет из базы эти картинки, составляет корректный заголовок и отправляет ответ. Вопрос в том, как переадресовать запрос на эту aspx-страницую. |
| Автор: arilou 24.5.2005, 13:55 | ||
http://forum.vingrad.ru/index.php?showtopic=52642&view=findpost&p=419369 Вероятно, тебе еще потребуется свой HttpHandler в дополнение к вышесказанному, но это я пальцем в небо тыкаю. |
| Автор: Tomcat 24.5.2005, 14:19 | ||
Я же сказал, что в этом случае мне придется предусмотреть все (!) варианты расширений для запрашиваемых ресурсов и указать их в настройках виртуальной директории. Чего я в принципе не могу обеспечить. Мало ли, что конечному узверю захочется хранить в моей CMS в качестве бинарных данных. |
| Автор: arilou 24.5.2005, 14:28 |
| Там можно поставить ".*" в качестве расширения. Попробуй - по идее, тогда все файлы должны идти через ASP.NET |
| Автор: Tomcat 24.5.2005, 14:57 | ||
Угу, только не ".*", а просто "*". Вот и решение! Бальшое пасиба!!! |
| Автор: arilou 24.5.2005, 15:08 |
| Я рад, что в итоге смог помочь |