Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка HTTP запроса, Выделение запрашиваемого ресурса 
:(
    Опции темы
Tomcat
Дата 19.5.2005, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2003
Где: Гродно, Беларусь

Репутация: 2
Всего: 2



Пишем 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?
Короче, КАК??? smile
PM MAIL   Вверх
mr.DUDA
Дата 19.5.2005, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Сделай так. В global.asax.cs пропиши проверку запроса на предмет того, файл какого типа запрашивается. Если это твоя картинка, тогда используй текущую сессию (или параметры запроса, как там у тебя задумано) для получения картинки из базы данных, и возвращай стрим с картинкой.

404-я ошибка возвращается, если ресурс с данным именем не найден в указанном виртуальном каталоге (или алиасе). Значит, ты можешь например создать global.asax прямо в той директории, где находится default.aspx, и в этой странице прописать ссылку на картинку, расположенную в той же директории и имеющую имя, которое твой global.asax.cs распознает, как я написал ранее.


--------------------
user posted image
PM MAIL WWW   Вверх
Tomcat
Дата 20.5.2005, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2003
Где: Гродно, Беларусь

Репутация: 2
Всего: 2



Цитата(mr @ 19.5.2005, 19:39)
Сделай так. В global.asax.cs пропиши проверку запроса на предмет того, файл какого типа запрашивается. Если это твоя картинка, тогда используй текущую сессию (или параметры запроса, как там у тебя задумано) для получения картинки из базы данных, и возвращай стрим с картинкой.

404-я ошибка возвращается, если ресурс с данным именем не найден в указанном виртуальном каталоге (или алиасе). Значит, ты можешь например создать global.asax прямо в той директории, где находится default.aspx, и в этой странице прописать ссылку на картинку, расположенную в той же директории и имеющую имя, которое твой global.asax.cs распознает, как я написал ранее.

Так все это понятно...
Просто дело в том, что если запрашиваемый ресурс является, например, картинкой (т.е. с каким-нибудь jpg-расширением) у global.asax.cs не вызываются обработчики вообще.
PM MAIL   Вверх
Tomcat
Дата 23.5.2005, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2003
Где: Гродно, Беларусь

Репутация: 2
Всего: 2



Мда, видимо не судьба.
PM MAIL   Вверх
arilou
Дата 23.5.2005, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



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.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Tomcat
Дата 24.5.2005, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2003
Где: Гродно, Беларусь

Репутация: 2
Всего: 2



Цитата(arilou @ 23.5.2005, 12: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.

Вариант, конечно.
Только в системе будут хранится файлы различного содержания. Одних толькокартинок с различными расширениями сколько. А еще есть pdf-ы, doc-и, zip-ы, rar-ы и т.п. Их всех придется прописать в насторойках для этой виртуальной директории, но все возможные расширения не предусмотришь.

Сейчас ковырялся в настройках виртуальной директории... А что если пойти на такую хитрость: в IIS настроить страницу переадресации в случае ошибки 404 на свою aspx-страницу, а не стандартную. Изврат, конечно... Но...

Вы что думаете?
PM MAIL   Вверх
arilou
Дата 24.5.2005, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Понимаешь, тот подход, что я предложил уже используется народом для решения типовой задачи (такой как у тебя). Есть еще один вариант: использовать ASPX-страницу для генерации image'а. Конечно, в дизайнере ты ничего не увидишь, но зато в рантайме все будет работать.

Если интересно, могу привести код на VB.NET


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Tomcat
Дата 24.5.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2003
Где: Гродно, Беларусь

Репутация: 2
Всего: 2



Цитата(arilou @ 24.5.2005, 10:31)
Понимаешь, тот подход, что я предложил уже используется народом для решения типовой задачи (такой как у тебя). Есть еще один вариант: использовать ASPX-страницу для генерации image'а. Конечно, в дизайнере ты ничего не увидишь, но зато в рантайме все будет работать.

Если интересно, могу привести код на VB.NET

Так вариант с генерацией картинки у меня и используется. Есть aspx-страница, которая берет из базы эти картинки, составляет корректный заголовок и отправляет ответ. Вопрос в том, как переадресовать запрос на эту aspx-страницую.
PM MAIL   Вверх
arilou
Дата 24.5.2005, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Цитата(Tomcat @ 24.5.2005, 11:47)
Вопрос в том, как переадресовать запрос на эту aspx-страницую

Ответ тут

Вероятно, тебе еще потребуется свой HttpHandler в дополнение к вышесказанному, но это я пальцем в небо тыкаю.


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Tomcat
Дата 24.5.2005, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2003
Где: Гродно, Беларусь

Репутация: 2
Всего: 2



Цитата(arilou @ 24.5.2005, 12:55)
Ответ тут

Я же сказал, что в этом случае мне придется предусмотреть все (!) варианты расширений для запрашиваемых ресурсов и указать их в настройках виртуальной директории. Чего я в принципе не могу обеспечить. Мало ли, что конечному узверю захочется хранить в моей CMS в качестве бинарных данных.
PM MAIL   Вверх
arilou
Дата 24.5.2005, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Там можно поставить ".*" в качестве расширения. Попробуй - по идее, тогда все файлы должны идти через ASP.NET


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
Tomcat
Дата 24.5.2005, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2003
Где: Гродно, Беларусь

Репутация: 2
Всего: 2



Цитата(arilou @ 24.5.2005, 13:28)
Там можно поставить ".*" в качестве расширения. Попробуй - по идее, тогда все файлы должны идти через ASP.NET

Угу, только не ".*", а просто "*".
Вот и решение! smile

Бальшое пасиба!!! smile
PM MAIL   Вверх
arilou
Дата 24.5.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Великий МунаБудвин
****


Профиль
Группа: Экс. модератор
Сообщений: 2646
Регистрация: 15.7.2004
Где: город-герой Минск

Репутация: 21
Всего: 61



Я рад, что в итоге смог помочь smile


--------------------
user posted imageuser posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0573 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.