Inology Ответов: 1

Проблема: в новой сессии после ответа.переадресация при звонке с помощью класса HttpWebRequest


Когда я устанавливаю значение сеанса, а затем перенаправляю его на другую страницу, Я могу получить значение сеанса. Следующим образом:

тест-набор.aspx-файл
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Session("test") = "hello world!"
    Response.Redirect("test-get.aspx")
End Sub


тест-вам.aspx-файл
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Response.Write("test = " & CType(Session("test"), String))
End Sub


Приведенные выше результаты:
test = hello world!


Однако при попытке сделать это с помощью HTTPWebRequest для перенаправленной страницы создается новый сеанс.

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim TestRequest As Net.HttpWebRequest = CType(System.Net.WebRequest.Create(Me.Request.Url.GetLeftPart(UriPartial.Authority) & "/test-set.aspx"), Net.HttpWebRequest)
    TestRequest.Method = "GET"
    Using TestResponse As Net.HttpWebResponse = CType(TestRequest.GetResponse, Net.HttpWebResponse)
        Using Reader As IO.StreamReader = New IO.StreamReader(TestResponse.GetResponseStream)
            Response.Write(Reader.ReadToEnd)
        End Using
    End Using
End Sub


Использование результатов HTTPWebRequest как:
test = 


Таким образом, HTTPWebRequest извлекает выходные данные с перенаправленной страницы, но перенаправленная страница открывается в новом сеансе.

Как я могу открыть перенаправленную страницу в том же сеансе, с которого она была перенаправлена?

Что я уже пробовал:

HttpWebRequest.AllowAutoRedirect

HttpWebRequest.MaximumAutomaticRedirections

HttpWebRequest.KeepAlive

HttpWebRequest.UseDefaultCredentials

Response.Redirect("test-get.aspx, True")

Response.Redirect("test-get.aspx, False")

F-ES Sitecore

Страницы, доступные через браузер, могут получить доступ к вашему сеансу, потому что они отправляют идентификатор сеанса в виде файла cookie. Когда вы сами создадите запрос с помощью кода, он добавит к этому запросу только то, что вы ему скажете добавить. Если вы хотите, чтобы страница, которую вы запрашиваете, имела доступ к сеансу, вам нужно будет добавить идентификатор сеанса в качестве файла cookie к отправляемому запросу.

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

http://geekswithblogs.net/xlinesonegoal/archive/2008/10/10/send-cookie-in-http-header-webrequest-asp.net-c-web-services.aspx

Er Avinash Kunnure

Вы правы

Inology

спасибо Вам большое, что сработали лакомством!

1 Ответов

Рейтинг:
5

Inology

Как Ф-Эс компания упомянутый в комментарии, я должен был добавить идентификатор сеанса. Это было просто сделано с помощью одной строки кода перед GetResponse:

TestRequest.CookieContainer = New Net.CookieContainer()


Таким образом, обновленный запрос выглядит следующим образом:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim TestRequest As Net.HttpWebRequest = CType(System.Net.WebRequest.Create(Me.Request.Url.GetLeftPart(UriPartial.Authority) & "/test-set.aspx"), Net.HttpWebRequest)
    TestRequest.Method = "GET"
    TestRequest.CookieContainer = New Net.CookieContainer()
    Using TestResponse As Net.HttpWebResponse = CType(TestRequest.GetResponse, Net.HttpWebResponse)
        Using Reader As IO.StreamReader = New IO.StreamReader(TestResponse.GetResponseStream)
            Response.Write(Reader.ReadToEnd)
        End Using
    End Using
End Sub