2013-06-12 1 views
2

В моем code Я отправляю HttpWebRequest на страницу моего сайта.Как манипулировать значениями сеанса во время HttpWebRequest?

Когда request отправляет на эту страницу, он не поддерживает значения Session.

Ниже приведен код, откуда я генерации веб-запроса:

Public Overloads Shared Function ReadURL(ByVal sUrl As String) As String 
     Dim sBody As String 
     Dim oResponse As HttpWebResponse 
     Dim oRequest As HttpWebRequest 
     Dim oCookies As New CookieContainer 
     oRequest = WebRequest.Create("http://localhost:64802/inventory/purchase_order.aspx?id=5654") 
     oRequest.CookieContainer = oCookies 
     oResponse = oRequest.GetResponse() 
     Dim oReader As New StreamReader(oResponse.GetResponseStream()) 
     sBody = oReader.ReadToEnd 
     oReader.Close() 
     oResponse.Close() 
     Return sBody 
    End Function 

Ниже приведен код, написанный на Page_Load из Purchaseorder.aspx.vb:

iDomains_ID = Session("Domains_ID") 
     iLogin_ID = Session("Login_ID") 
     sPage = Request.Path 
     If Request.QueryString.Count > 0 Then sPage &= "?" & Request.QueryString.ToString() 
     sPage = shared01.Encrypt(sPage, Application("PK")) 

     If Not User.Identity.IsAuthenticated Or iLogin_ID = 0 Then 
      Response.Redirect("/login.aspx?page=" & sPage) 
      Exit Sub 
     End If 

Выше code не получает значения session и перенаправляет их на login page.

Итак, как я могу поддерживать session на обеих страницах в течение HttpWebRequest.

Ищет ваши ответы.

EDIT

Я пытался использовать CookieContainer класс, как вы можете видеть выше кода. Но это совсем не работает.

ответ

1

В качестве альтернативы, предполагая, вызывающей и вызываемой страницы в одном приложении, вы можете использовать the Server.Execute method для загрузки содержимого страницы без отдельного запроса на сайте:

Public Overloads Function ReadURL(ByVal sUrl As String) As String 
    Using writer As New StringWriter() 
     Server.Execute("~/inventory/purchase_order.aspx?id=5654", writer, False) 
     Return writer.ToString() 
    End Using 
End Function 
+0

Спасибо Его работая отлично. :) Надеюсь, я не создам никаких проблем на сервере. Что ты думаешь? –

+0

@CodeRider: эта версия будет с меньшей вероятностью вызывать проблемы, чем отдельный запрос на сайт, поскольку для обработки запроса будет использоваться только один поток ASP.NET. –

+0

Спасибо, Ричард. Вы мне очень помогли. Я буду отмечать его как ответ после тестирования на сервере. –

0

Ваш код выглядит так, как будто вам нужно будет сделать запрос и сообщение. Первый запрос перенаправит вас на вашу страницу входа. Второй запрос будет отправлен на страницу входа в систему, которая запустит сеанс и (?) Сохранит информацию в переменных сеанса. Это сообщение (на странице входа) затем перенаправит вас на нужную страницу.

Я использовал код в этом примере http://www.codeproject.com/Articles/145122/Fetching-ASP-NET-authenticated-page-with-HTTPWebRe (я немного изменил его), чтобы написать приложение для этого.

1

Если вы правильно поняли, вы делаете запрос с одной страницы на своем сайте на другой, и хотите отправить файлы cookie с текущего HttpRequest с помощью WebRequest?

В этом случае вам необходимо вручную скопировать куки в CookieContainer:

For Each key As String In Request.Cookies.AllKeys 
    Dim sourceCookie As HttpCookie = Request.Cookies(key) 

    Dim destCookie As New Cookie(sourceCookie.Name, sourceCookie.Value, sourceCookie.Path, "localhost") 
    destCookie.Expires = sourceCookie.Expires 
    destCookie.HttpOnly = sourceCookie.HttpOnly 
    destCookie.Secure = sourceCookie.Secure 

    oCookies.Add(destCookie) 
Next 

NB: Вам необходимо либо сделать функцию ReadUrl не- Shared или передавать ток HttpRequest в качестве параметра.

Вам также необходимо убедиться, что вызывающая страница имеет EnableSessionState="false" в директиве <%@ Page ... %>, иначе страница, которую вы вызываете, будет винить, пытаясь получить блокировку сеанса.

+0

Я просто хочу значения сеанса доступа на следующей странице. Можно ли использовать 'cookie container'? –

+0

не работает. даже сейчас webrequest не отправляет ... –

+0

@CodeRider: Что значит «не отправлять»? Выполняет ли запрос, но не отправляет файлы cookie, или что-то еще не так? –