WebClient编码问题是vb.net

时间:2011-09-14 14:33:43

标签: vb.net encoding webclient

在我的vb.net应用程序中,我正在与另一个组编写的Web服务进行交互。此交互涉及验证帐号。另一组写他们的web服务的方式是我应该点击一个特定的URL,检索一个sessionid号,然后将该号码用于后续请求。我遇到的问题是,当我传递sessionid时,它需要包含在{}括号中。例如:“http://server/acctverify/Verification.groovy; jsessionid = $ {123456789}”

问题在于,当我传递上述URL时,它被编码为如下所示: http://server/acctverify/Verification.groovy;jsessionid= $%7B123456789%7D 替换了{}。

我不明白为什么会这样,也不知道如何解决。

我正在运行的代码:

    Dim client As WebClient = New WebClient
    Dim Sessionuri As Uri = New Uri(VerifyInit)
    Dim sessionID As String = client.DownloadString(Sessionuri)
    Dim FinalUri As Uri = New Uri(VerifyPost & "{" & sessionID & "}?acctnumber=")
    Dim FinalResults As String = client.DownloadString(FinalUri)
    MessageBox.Show(FinalResults)

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Uri类有deprecated constructor,当构造函数的 dontEscape 参数为True时,它将阻止对URI进行编码。

像这样:

Dim client As WebClient = New WebClient 
Dim Sessionuri As Uri = New Uri(VerifyInit) 
Dim sessionID As String = client.DownloadString(Sessionuri) 
Dim FinalUri As Uri = New Uri(VerifyPost & "{" & sessionID & "}?acctnumber=", true) 
Dim FinalResults As String = client.DownloadString(FinalUri) 
MessageBox.Show(FinalResults) 

不推荐使用此构造函数:您尝试创建的URI不是合法的URI。必须对{}字符进行编码。但是,如果您使用的是不兼容的服务器,只接受未编码的字符,则上面的构造函数应该可以工作。