−1°C
завтра: 1°C
Погода в Перми
−1°C
вечером−2°C
ночью−5°C
завтра1°C
Подробно
 92,26
−0.3291
Курс USD ЦБ РФна 29 марта
92,2628
−0.3291
 99,71
−0.5647
Курс EUR ЦБ РФна 29 марта
99,7057
−0.5647
  • Надо, чтобы некий 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" />", то есть, без ширины, хотя при автономном запуске все нормально.

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

  • Вобщем, с 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% заканчивается таймаутом.

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

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

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

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

Модератор: