powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как получить страницу по context хэндлера?
25 сообщений из 25, страница 1 из 1
Как получить страницу по context хэндлера?
    #34041102
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня на странице Page имеется рисунок, формируемый динамически. Его получением заведует Handler.ashx, на который имеется указание на странице в соответствующем месте aspx.

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

В ProcessRequest хэндлера стандартно заложен параметр
HttpContext context
Возможно ли, имея этот context, получить страницу (или по крайней мере ее сессию), ради которой произошло обращение к ProcessRequest хэндлера?
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34041389
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПроблема в том, что пользователей много, и каждому может потребоваться свой рисунок.

а как ты определяешь индивидуального пользователя - авторизация с формы?
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34041443
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я никак не определяю и никакой авторизации у меня не стоит.

Я рассуждаю так: когда пользователь зовет обсуждаемую нами страницу, то (в связи с тем, что там есть Handler.aspx) вызывается Handler.aspx
И мне нужно знать, в связи с чем я оказался в точке ProcessRequest (HttpContext context) хэндлера.
На самом деле, мне достаточно знать только текущую сессию, а не страницу. Но даже этого я не знаю, поскольку имеющийся при context свой Session - совсем другой и равен почему-то всегда null.
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34041633
Paulmay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Либо передавай все необходимые данные параметрами в url (image.ashx?...), либо используй не ashx, а aspx. Там-то сессия будет точно.

Если надо только получить URL страницы, можно использовать context.Request.UrlReferrer.

Можешь попытаться использовать Syastem.Web.SessionState.SessionStateUtility.GetHttpSessionStateFromContext
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34041751
Dimon aka Manowar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IRequiresSessionState кури для хендлера. И потом context.Session

Многие вещи нам непонятны не оттого, что наши понятия слабы, а оттого, что данные вещи не входят в круг наших понятий.
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34041817
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ничего не понятно но очень интересно...
для того что бы твой хендлер имел представление о текущей сессии нужно (забыл как это красиво и правильно называется ;) - короче прописать вот такую конструкцию - Implements IReadOnlySessionState (откроет сессию на чтение - как на запись уже не помню - сам посмотри) - и уже тогда использовать context.Session ...
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34041852
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Paulmay,
может быть постепенно что-то и выйдет, но пока - не очень.

1) через url я передавать ничего не могу, поскольку НЕ я вызываю Handler.aspx Он вызывается Asp'oм в связи с тем, что задан среди компонентов страницы Page

2) В хэндлере я написал:

IHttpSessionState sesstate= System.Web.SessionState.SessionStateUtility.GetHttpSessionStateFromContext(context);

Но при этом получаю прерывание по переменной SessionStateUtility - там находится null (хотя я это и не очень понимаю).
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34041909
Paulmay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1) Вызывает твой хендлер не ASP, а браузер, когда ему настает время загружать рисунок. У тебя на странице должен быть русунок (img, ImageButton либо что-то еще), у которого должно быть прописано в одном из параметров URL твоего хендлера. Вот в этот URL тебе и надо добавить параметры.
<img src="image.ashx?blablabla" />

2) Можно поступить проще - унаследовать класс обработчика от IRequiresSessionState либо от IReadOnlySessionState.

На C# это выглядит примерно так:
<%@WebHandler Class="ImageGenerator" %>
using System;
using System.Web;

public class ImageGenerator (IHttpHandler, IRequiresSessionState)
{
...
}

3) А с aspx все просто - вместо ProcessRequest используешь OnLoad (либо Page_Load). В остальном все также. Но, я думаю, этот метод тебе не понадобится (см. п1 и п2)
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34041941
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Dimon aka Manowar

Вы пишете: "IRequiresSessionState кури для хендлера".
Состояние IRequiresSessionState=true я, как понимаю, нужно задать для хэндлера еще на Page.
Но там я кроме наименования класса (HandlerPict) еще ничего не знаю. Не понимаю, как я могу это там сделать.

Внутри хэндлера я написал фрагмент:

if (context.Handler is IRequiresSessionState)
count= 2;

- и он был принят Студией.
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34041963
Paulmay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так... Я начинаю ничего не понимать...

Приведи, если это не секретная информация, каким образом ты используешь свой хендлер? Где на странице находится ссылка на него?
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34041972
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Paulmay

Ну конечно у меня есть типа
<img src="image.ashx?blablabla" />
но эти blablabla нисколько не помогут, потому что не могу же я менять их в зависимости от сессии. Мне нужно узнать саму сессию, потому что через нее мне становится доступен мой Блок Управления Сайтом (БУС).
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042013
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to Paulmay


Пожалуйста: на странице стоит только это:
<asp:TableCell>
<img id="imgPicture" runat="server" alt="Picture" src="HandlerPict.ashx" />
</asp:TableCell>




И есть модуль HandlerPict.ashx
<%@ WebHandler Language="C#" Class="HandlerPict" %>

using System;
using System.IO;
using System.Web;

using System.Web.SessionState;

public class HandlerPict : IHttpHandler {
public bool IsReusable {
get {
return true;
}
}
public void ProcessRequest (HttpContext context) {
const int buffersize= 1024 * 16;
Stream stream;
byte[] buffer= new byte[buffersize];
int count;


stream= the.Site(context).Picture;

// Set up the response settings
context.Response.ContentType= "image/jpeg";
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.BufferOutput= false;

context.Response.Clear();
// Write image stream to the response stream
count= stream.Read(buffer, 0, buffersize);
while (count > 0) {
context.Response.OutputStream.Write(buffer, 0, count);
count= stream.Read(buffer, 0, buffersize);
}
stream.Close();
the.Site(context).RegisteredPhoto[0]= null;
}
}


Всё это отлично показывает рисунки. Проблема состоит только в том, что пользователей много и для каждого должен быть свой stream в зависимости от сессии, которую я хочу уметь добыть из context.
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042093
Paulmay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
два варианта

1) В Page_Load укажи Picture.src=String.Format("HandlerPict.ashx?pictpath={0}", the.Site(Context).PictureFilename);

В HandlerPict.ashx проверь, не подсунул ли тебе хакер в качестве pictname какую-то лажу (вроде "|del c:\windows\*.*"), и грузи этот файл.

2) public class HandlerPict :IHttpHandler, IRequiredSessionState
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042119
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл написать, что в приведенном мной листинге Picture есть MemoryStream, поэтому никакого FileName у него нет, и передавать параметр бесполезно.
В указанном MemoryStream находится корректный образ рисунка, и опыт показывает, что изображение бывает правильным.

ДАЖЕ если бы это был обычный файл, а не MemoryStream, острота проблемы бы от этого не исчезла, потому что ничего не мешает нескольким пользователям одновременно лазить в файл. А MemoryStream у каждой сессии свой - и здесь всё нормально.
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042247
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я только что сделал "показывательку" картинок не из .ashx, а на основе обычного .aspx Содержимое хэндлера было перенесено в Page_Load.
Действительно, всё нормально работает, - и с сессиями, разумеется, проблем нет.

(Единственное, в Page Студия теперь не предлагает этот модуль Picture.aspx в качестве кандидата на параметр src в img).

Это можно считать решением проблемы...

Спасибо всем принявшим участие в обсуждении этого вопроса.
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042302
parus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Page pg = (HttpContext.Current.Handler as Page);
Сливаясь с Мировым Разумом, не теряйте Своего !

Web: www.sslabs.co.uk
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042374
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сливаясь с Мировым Разумом, не теряйте Своего !

Ваша конструкция, PARUS, дает круглый null.
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042718
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Я только что сделал "показывательку" картинок не из .ashx, а на
> основе обычного .aspx Содержимое хэндлера было перенесено в Page_Load.

так ты попробовал реализировать IRequiredSessionState для своего хэндлеоа
или нет? По-моему это должно было бы решить твою проблему с сессией. А через
aspx - это просто workaround


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042793
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Артёму

Нет, я не смог реализировать IRequiredSessionState для своего хэндлера.

Если это у тебя действительно получится (вся ситуация описана выше), напиши, пожалуйста.
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042809
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Нет, я не смог реализировать IRequiredSessionState для своего
> хэндлера.

а ты пробовал ставить HandlerPict :IHttpHandler, IRequiresSessionState ?
"Реализировать этот интерфейс" - просто громкое слово, на самом деле - это
просто маркерный итерфейс и ничего на самом деле реализировать ненадо.


> Если это у тебя действительно получится (вся ситуация описана выше),
> напиши, пожалуйста.

на самом деле, самодельные хэндлеры я использую давно и успешно работаю с
сессией внутри них (благо IRequiresSessionState помагает в этом :) )


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042831
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема не в том, что я не могу написать
HandlerPict :IHttpHandler, IRequiresSessionState

Мне не хватает квалификации: я не понимаю, что дальше можно делать с IRequiresSessionState

Ведь в хэндлере менять значение SessionState уже, как я понимаю, поздно. А каким образом его установить заранее я не понимаю и не умею. Здесь нужны подробные инструкции.
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042837
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Проблема не в том, что я не могу написать
> HandlerPict :IHttpHandler, IRequiresSessionState
> Мне не хватает квалификации: я не понимаю, что дальше можно делать с
> IRequiresSessionState

ну так собственно "HandlerPict :IHttpHandler, IRequiresSessionState" - это
посути то на чём заканчиваеца "что нужно сделать". Далее обращаешься к
сессии через context - его то ты уже имеешь.

> Ведь в хэндлере менять значение SessionState уже, как я понимаю,
> поздно. А каким образом его установить заранее я не понимаю и не умею.
> Здесь нужны подробные инструкции.

что-то я не понимаю, почему поздно? А счас ты где его
устанавливаешь/считываешь?


Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34042842
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сейчас бегу пробовать...
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34049299
hilsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дополнение для интересующихся.

В приведенном выше листинге HandlerPict.ashx для успешной работы необходимо сделать следующие поправки:

1) операцию
stream.close();
из хэндлера надо удалить (иначе картинка будет показываться только один раз) и перенести на момент закрытия сессии

2) вместе этого в хэндлер надо вставить команду:
stream.Seek(0, SeekOrigin.Begin);
чтобы чтение начиналось с начала.
...
Рейтинг: 0 / 0
Как получить страницу по context хэндлера?
    #34061304
Аноним
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополнение для интересующихся.

В приведенном выше листинге HandlerPict.ashx для успешной работы необходимо сделать следующие поправки:

1) операцию
stream.close();
из хэндлера надо удалить (иначе картинка будет показываться только один раз) и перенести на момент закрытия сессии

2) вместе этого в хэндлер надо вставить команду:
stream.Seek(0, SeekOrigin.Begin);
чтобы чтение начиналось с начала.




данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как получить страницу по context хэндлера?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]