【发布时间】:2018-07-11 14:25:51
【问题描述】:
我编写了一个 VB 程序来访问 Web 上的信息。 它可以工作,但是当尝试在 UWP(通用 Windows)中做同样的事情时...... 我收到以下消息: "'GetResponse' 不是 'WebRequest' 的成员"
这是我使用较少网站信息的代码。如何在通用 Windows 平台中使用此代码。
Imports System
Imports System.IO
Imports System.Net
Module Code
Sub SendWebRequest()
Dim MyWebRequest As WebRequest
Dim MyWebResponse As WebResponse
Dim SR As StreamReader
Dim ReadString As String
Dim MyCache As New CredentialCache()
Dim MyCredential As NetworkCredential = MyCache.GetCredential(New Uri("http://xxxxxx.com:xxxx"), "Basic")
If MyCredential Is Nothing Then
MyCache.Add(New Uri("http://http://xxxxxx.com:xxxx"), "Basic", New NetworkCredential("UserName", "UsePassWord"))
End If
MyWebRequest = WebRequest.Create("http://http://xxxxxx.com:xxxx/xxxx")
MyWebRequest.Credentials = myCache
MyWebResponse = MyWebRequest.GetResponse()
SR = New StreamReader(MyWebResponse.GetResponseStream)
Do
ReadString = SR.ReadLine
If InStr(ReadString, "Listen to the pronunciation of") Then
'Do Something
Exit Do
End If
Loop Until SR.EndOfStream
MyWebResponse.Close()
End Sub
End Module
我使用添加 Async 和 Await 进行了更新。 . . MyWebresponse = Await MyWebRequest.GetResponseAsync() 的运行时问题 异常用户未处理:System.PlatformNotSupportedException:'属性'Credentials'不支持值'System.Net.CredentialCache'。'
Async Sub SendWebRequest()
Dim MyWebRequest As WebRequest
Dim MyWebResponse As WebResponse
Dim SR As StreamReader
Dim ReadString As String
Dim MyCache As New CredentialCache()
Dim MyCredential As NetworkCredential = MyCache.GetCredential(New Uri("http://xxxxxx.com:xxxx"), "Basic")
If MyCredential Is Nothing Then
MyCache.Add(New Uri("http://http://xxxxxx.com:xxxx"), "Basic", New NetworkCredential("UserName", "UsePassWord"))
End If
MyWebRequest = WebRequest.Create("http://http://xxxxxx.org:xxxx/xxxx")
MyWebRequest.Credentials = myCache
MyWebResponse = Await MyWebRequest.GetResponseAsync()
SR = New StreamReader(MyWebResponse.GetResponseStream)
Do
ReadString = SR.ReadLine
If InStr(ReadString, "Listen to the pronunciation of") Then
'Do Something
Exit Do
End If
Loop Until SR.EndOfStream
MyWebResponse.Close()
End Sub
如果有人能看到我在上面做错了什么,我将不胜感激。 同时,我将按照 jmcilhinney 的建议尝试 HttpClient
【问题讨论】:
-
这是编译错误还是运行时异常?
-
编译错误...“GetReponse 不是 WebRequest 的成员”是错误消息
-
以前可以,但使用 UWP 时不行
-
我刚刚将您的代码粘贴到一个空白的 UWP 应用程序中,我得到了相同的行为。查看可用的成员,我看到
BeginGetResponse列出。我还没有从事过 UWP 项目,但我似乎记得曾经读过关于异步编程以确保响应式 UI 的重点。看起来编译器正在阻塞同步方法并只允许异步等效方法,所以看起来你必须走那条路。 -
实际上,有一个
GetResponseAsync方法,您可以使用Await更轻松地调用它,但this thread 似乎表明这两种方法都行不通,但它也提供了一种替代方法。