Web请求是一种类型,不能用作表达式

时间:2013-03-09 16:25:16

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

我正在为Windows Phone制作应用程序,因为我需要一些保存在Web浏览器控件中的登录cookie,我使用此处的代码:Grabbing Cookies in Web Browser Control - WP7来创建HTTPWebRequest并获取一些用于解析的JSON数据但是我在这个片段的最后一行得到了两个错误

 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'之前添加'Address Of'来修复错误(2)但仍然存在错误(1)。 更新2:修复了所有错误,但没有得到任何响应(空)。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:0)

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

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

    req.BeginGetResponse(AddressOf request_CallBack, Nothing)
    

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

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

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

    req.BeginGetResponse(AddressOf request_CallBack, req)