3

在我的网站中,code我正在发送一个HttpWebRequest页面。

request发送到这个页面时,它不维护这些Session值。

下面是代码,我从中生成 Web 请求:

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

下面是在 Purchaseorder.aspx.vb 的 Page_Load 上编写的代码:

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.

那么,我如何sessionHttpWebRequest.

正在寻找您的回复。

编辑

CookieContainer正如您在上面的代码中看到的那样,我尝试使用类。但它根本不起作用。

4

3 回答 3

1

作为替代方案,假设调用页面和被调用页面在同一个应用程序中,您可以使用Server.Execute方法加载页面内容,而无需向站点发出单独的请求:

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
于 2013-06-18T12:28:06.013 回答
1

如果我对您的理解正确,您正在从站点中的一个页面向另一个页面发出请求,并且您想将当前的 cookieHttpRequest与您的WebRequest?

在这种情况下,您需要手动将 cookie 复制到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

注意:您要么需要将ReadUrl函数设为 non- Shared,要么将 currentHttpRequest作为参数传递。

您还需要确保调用页面包含EnableSessionState="false"<%@ Page ... %>指令中,否则您正在调用的页面将在尝试获取会话锁时挂起。

于 2013-06-17T13:44:49.690 回答
0

您的代码似乎需要发出请求和帖子。第一个请求会将您重定向到您的登录页面。第二个将是您发布到登录页面的请求,它将启动会话并(?)将信息存储到会话变量中。该帖子(到登录页面)然后会将您重定向到您想要的页面。

我在此示例中使用了代码http://www.codeproject.com/Articles/145122/Fetching-ASP-NET-authenticated-page-with-HTTPWebRe(我对其进行了一些调整)来编写一个应用程序来执行此操作。

于 2013-06-12T12:55:43.553 回答