Мобильная версия форумов
Открыть
 −4°C
завтра: −13°C
Погода в Перми
−4°C
днем−3°C
вечером−3°C
завтра−13°C
Подробно
 66,70
+0.1615
Курс USD ЦБ РФна 16 февраля
66,7044
+0.1615
 75,25
+0.2021
Курс EUR ЦБ РФна 16 февраля
75,2492
+0.2021
  • гундос

    Сообщений: 16214

    Надо, чтобы некий aspx внутри страницы вызывался POST-ом. Ну вот хочется встроить в страницу свою логику, но чтоб вся текстовка хранилась в базе.
    В частности, в текст статьи в базе встраиваем свою директиву <exec>something.aspx</exec>.
    Для вызова собираем QueryString, заполняем Form и вызываем нужный apsx. Упрощенно это выглядит так:
    HttpWebResponse rq = WebRequest.Create(url);
    rq.Method = "POST";
    rq.ContentType = "application/x-www-form-urlencoded";
    HttpWebResponse rsp = rq.GetResponse();
    Stream receiveStream = rsp.GetResponseStream();


    Вроде, как-то работает. Но не устраивают следующие моменты:
    1. Как передать данные FileUpload? Как их запихать в новый WebRequest? Если с Request.Form понятно, их пишем rq.RequestStream().Write(...). А куда файл запихать?
    2. Эта зараза запускает aspx в другой сессии. Как объехать?
    3. Едет форматирование. Например, "<asp:textbox runat="server" id="tb_email" width="400px" />" оформляется "<input name="ctl00$Content$tb_email" type="text" id="ctl00_Content_tb_email" />", то есть, без ширины, хотя при автономном запуске все нормально.

    эгоист - это человек, который думает в первую очередь о себе и только потом обо мне

  • гундос

    Сообщений: 16214

    Вобщем, с post-ом разобрались.
    Осталось выполнять новый запрос в той же сессии.

    Из теории понятно, что для этого нужно передать ASP.NET_SessionID в куках.
    Многие пишут, что надо создать HttpWebRequest, получить HttpWebResponse, прочитать куки и передать их в требуемый выполняемый HttpWebRequest. На самом деле, решение много проще. Ведь все куки уже есть в Page.Request, а запустить надо именно в его сессии.

    rq As HttpWebRequest = HttpWebRequest.Create("http://...")
    rq.UserAgent = Request.UserAgent
    rq.Method = "POST"
    rq.ContentType = "multipart/form-data; boundary=" & _boundary
    rq.Headers.Add(HttpRequestHeader.Cооkie, Request.Headers("Cооkie"))
    ' Записать данные, которые будут доступны через Request.Form
    ' Записать данные, которые будут доступны через Request.Files
    Dim resultStream As New StreamReader(rq.GetResponse().GetResponseStream(), Encoding.UTF8)


    И тут возникает грабля. :зло:
    Если в Request.Headers("Cооkie") заменить ASP.NET_SessionID, например, на ASP.NET_SessionID1, все работает. Но, понятно дело, запускается в левой сессии. А вот если ASP.NET_SessionID присутствует, то иногда срабатывает, но в 99% заканчивается таймаутом.

    Уже всю голову сломал. Ну никак не получается:хммм:

    эгоист - это человек, который думает в первую очередь о себе и только потом обо мне

Записей на странице:

Перейти в форум

Модератор: