2013-03-10 2 views
0

Windows Phone 앱을 만들고 있는데 URL에서 JSON 데이터를 가져 오려고합니다. 사용자는 JSON 데이터를 가져 오기 위해 JSON 데이터를 호스팅하는 웹 사이트에 로그인해야하며 브라우저에서 데이터를 표시하고 브라우저에서 인식하지 못하기 때문에 웹 브라우저 컨트롤을 사용할 수 없습니다. 이상한 이유), Store에서 JSON 파일 유형을 처리 할 수있는 앱을 검색하도록 요청합니다. (Windows PC에서 데스크탑 브라우저의 URL을 열면 원시 JSON 데이터를 볼 수 있습니다.) 일반 HTTPWebRequest 또는 WebClient를 사용하여 로그인 쿠키를 설정해야하는 JSON 데이터를 가져올 수 없습니다 (JSON 데이터는 사용자별로 다름). 웹 브라우저 컨트롤에서 쿠키를 추출하여 WebClient 또는 HTTPWebRequest와 함께 사용할 수 없습니다. 그래서 내가 할 수있는 가장 좋은 일은 WebBrowser에 의해 내부적으로 사용되는 IWebRequestCreate의 특별한 내부 인스턴스를 사용하는 것입니다. 해당 클래스로 백그라운드 HTTP 요청을 열면 쿠키가 WebBrowser 컨트롤에 의해 작성/전송 된 것처럼 자동으로 설정됩니다. 하지만 내 코드는 JSON 데이터를 반환하지 않습니다. 문자열 resp이 비어 있으므로 빈 응답이 표시됩니다.빈 응답 HTTPWebRequest : Windows Phone 8

Dim browser = New WebBrowser() 
Dim brwhttp = GetType(WebRequestCreator).GetProperty("BrowserHttp") 
Dim requestFactory = TryCast(brwhttp.GetValue(Browser, Nothing), IWebRequestCreate) 
Dim uri = New Uri("http://api.quora.com/api/logged_in_user?fields=inbox,notifs,following,followers") 
Dim req = requestFactory.Create(uri) 
req.Method = "GET" 
req.BeginGetResponse(New AsyncCallback(AddressOf request_Callback), req) 

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 
End Sub 

문제점은 무엇입니까 : 아래

코드인가?

답변

1
내가 사용하는 CopyTo 당신이 아마 여기에 코드의의에서는 StreamReader와 함께 읽을하기 전에 처음으로 tempStream의 포인터를 재설정해야 할 버퍼의 끝에서 스트림의 포인터를 떠날 수 있다는 것을 발견

...

webResponse.GetResponseStream().CopyTo(tempStream); 

tempStream.Seek(0, SeekOrigin.Begin); 

Dim sr As New StreamReader(tempStream);