我正在尝试创建一个名为登录类的类,该类登录到一个网站并将cookie保存在cookiecontainer
中。然后我想在其他课程中使用cookiecontainer
中保存的cookie。我了解如何发送请求并将Cookie保存在cookiecontainer
中,但我不知道如何在另一个类中使用cookiecontainer
。我是否将cookiecontainer
设为公共共享类型?然后,我如何从该类的特定实例访问cookie?
CODE:
我正在使用http://howtostartprogramming.com/vb-net/vb-net-tutorial-52-httpwebrequest-cookiecontainer/中的代码。
Imports System.Net
Imports System.Text
Imports System.IO
Public Class Login
Public shared logincookie As CookieContainer
Private Sub Login()
Dim postData As String = "poststring"
Dim tempCookies As New CookieContainer
Dim encoding As New UTF8Encoding
Dim byteData As Byte() = encoding.GetBytes(postData)
Dim postReq As HttpWebRequest = DirectCast(WebRequest.Create("website"), HttpWebRequest)
postReq.Method = "POST"
postReq.KeepAlive = True
postReq.CookieContainer = tempCookies
postReq.ContentLength = byteData.Length
Dim postreqstream As Stream = postReq.GetRequestStream()
postreqstream.Write(byteData, 0, byteData.Length)
postreqstream.Close()
Dim postresponse As HttpWebResponse
postresponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
tempCookies.Add(postresponse.Cookies)
logincookie = tempCookies
End Sub
End Class
答案 0 :(得分:1)
向项目添加模块,将其公开。
在其中创建公共属性。
Public Module Globals
Public Property GlobalCookies As CookieContainer
End Module
这将允许您与同一解决方案中的其他类共享。
你应该小心使用全局变量,因为它们会增加复杂性并导致很难找到的错误。
是的,这在功能上等同于类上的共享类型。由于VB没有共享类,但我倾向于使用模块,因为它们实际上是共享类。你可以拥有一个共享所有属性的类,这几乎是一样的,但是你必须记住不要在该类上放置非共享属性。
我不建议在实例化的类上放置共享状态,因为状态超出了类的范围而且不是OO。当然,共享功能是完全可以接受的,因为它允许您在一个物理位置对相似的行为进行分组。