【问题标题】:GetResponse not a member of WebRequest in UWPGetResponse 不是 UWP 中 WebRequest 的成员
【发布时间】: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 似乎表明这两种方法都行不通,但它也提供了一种替代方法。

标签: vb.net uwp


【解决方案1】:

理论上,你应该可以改变这个:

Sub SendWebRequest()

到这里

Async Sub SendWebRequest()

还有这个:

MyWebResponse = MyWebRequest.GetResponse()

到这里:

MyWebResponse = Await MyWebRequest.GetResponseAsync()

This thread 表示这可能不起作用。它确实建议使用HttpClient 作为替代方案,这意味着代码如下:

Dim client As New HttpClient
Dim response = Await client.GetAsync(New Uri("URL here"))

If response.IsSuccessStatusCode Then
    Dim data = Await response.Content.ReadAsStringAsync()

    For Each line In data.Split({vbLf, vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
        'Use line here.
    Next
End If

请注意,我不能 100% 确定这些“vb”常量是否可以在 UWP 中使用,但为了简单起见,我在这里使用它们。

【讨论】:

  • 好的,请停止在 cmets 中发布大量代码。如您所见,它几乎不可读,尤其是如果您不对其进行格式化。
  • 至于你的尝试,我特意发布了它可能不起作用并提供了替代方案。你为什么要发帖告诉我,如果不尝试替代方案就行不通?
  • 它在我实施时不起作用。这很容易尝试。我现在正在研究httpclient。谢谢 。 . .
  • jmcihinney 。 . .谢谢你的帮助。对我造成的混乱感到抱歉。我仍在学习如何使用该网站。小心 。 . .
  • 一切顺利,一切顺利。 :-)
【解决方案2】:

以下是我在 UWP 中需要的。发送 Web 请求并监控返回。 ...感谢 jmcilhinney 的帮助

导入 System.Net

导入 System.Net.Http

导入 System.Text

模块代码

Async Sub SendWebRequest()
    Dim client As New HttpClient

    Dim byteArray = Encoding.ASCII.GetBytes("UserName:PassWord")
    client.DefaultRequestHeaders.Authorization = New System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray))

    Dim response = Await client.GetAsync(New Uri("http://xxxxx.xxxxxx.org:####/xxxxx"))

    If response.IsSuccessStatusCode Then
        Dim data = Await response.Content.ReadAsStringAsync()

        For Each line In data.Split({vbLf, vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
            'Use line here.
        Next
    End If
End Sub

结束模块

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多