【问题标题】:Web Request is a type and cannot be used as an expressionWeb Request 是一种类型,不能用作表达式
【发布时间】:2013-03-09 16:25:15
【问题描述】:

我正在为 Windows Phone 制作一个应用程序,因为我需要一些保存在 Web 浏览器控件中的登录 cookie,所以我使用这里的代码:Grabbing Cookies in Web Browser Control - WP7 创建一个 HTTPWebRequest 并获取一些 JSON 数据进行解析,但我在这个 sn-p 的最后一行出现两个错误

 Dim browser = New WebBrowser()
    Dim brwhttp = GetType(WebRequestCreator).GetProperty("BrowserHttp")
    Dim requestFactory = TryCast(brwhttp.GetValue(Browser, Nothing), IWebRequestCreate)
    Dim uri = New Uri("some-url")
    Dim req = requestFactory.Create(uri)
    req.Method = "GET"
    req.BeginGetResponse(New AsyncCallback(request_CallBack), WebRequest)

(1)。 'WebRequest' 是一种类型,不能用作表达式。 (2)。委托“System.AsyncCallback”需要一个“AddressOf”表达式或 lambda 表达式作为其构造函数的唯一参数。

如何解决?

更新 1:通过在“request_CallBack”之前添加“地址”来修复错误 (2),但错误 (1) 仍然存在。 更新 2:修复了所有错误,但没有得到任何响应(空)。我的代码有什么问题?

【问题讨论】:

    标签: vb.net httpwebrequest windows-phone-8 webbrowser-control windows-phone


    【解决方案1】:

    问题是两个与req.BeginGetResponse(New AsyncCallback(request_CallBack), WebRequest) 行有关的问题。这有两个问题。

    1. VB.Net 没有真正的一流函数,因此您必须使用AddressOf 运算符来创建委托。此外,编译器将推断委托类型,因此您不需要构造函数
    2. BeginGetResponse 将状态对象作为第二个参数,而不是类型表达式。这是你在回调中需要的任何东西

    所以:

    req.BeginGetResponse(AddressOf request_CallBack, Nothing)
    

    如果您需要将类型传递给请求回调,请使用

    req.BeginGetResponse(AddressOf request_CallBack, GetType(WebRequest))
    

    但这看起来像是复制更改,而您想要的可能是

    req.BeginGetResponse(AddressOf request_CallBack, req)
    

    【讨论】:

    • @user2141754 已更正,除非您需要将信息传递给 request_Callback
    • 这是我的 request_Callback 代码:Private Sub request_Callback(asyncResult As IAsyncResult) Dim webRequest As HttpWebRequest = DirectCast(asyncResult.AsyncState, HttpWebRequest) Dim webResponse As HttpWebResponse = DirectCast(webRequest.EndGetResponse(asyncResult), HttpWebResponse) Dim tempStream As New MemoryStream() webResponse.GetResponseStream().CopyTo(tempStream) Dim sr As New StreamReader(tempStream) Dim resp As String = sr.ReadToEnd MessageBox.Show(resp) End Sub 在第 1 行引发错误。无法将“System.RuntimeType”类型的对象转换为“System.Net.HttpWebRequest”类型。
    • 非常感谢!但是最后一行还有一个错误:无效的跨线程访问。 System.Windows.ni.dll 中出现“System.UnauthorizedAccessException”类型的异常,但未在用户代码中处理
    • @user2141754 尝试Me.Invoke(addressof Messagebox.Show) 在 UI 线程上执行
    • Me.Invoke 在 WP 上显然不存在。
    猜你喜欢
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多