problema de autenticação possível? Carregando um JSON via WebClient em Silverlight 4
-
11-09-2019 - |
Pergunta
Eu estou jogando com o Silverlight 4, e eu quando meus página é carregada, eu chamo
beginGet("my/people/", new OpenReadCompletedEventHandler(continueLoadStamData));
que tenho definido como
private void beginGet(string endpoint, OpenReadCompletedEventHandler callback)
{
WebClient wc = new WebClient();
wc.Credentials = new NetworkCredential(username, password);
wc.OpenReadCompleted += callback;
wc.OpenReadAsync(new Uri(baseURL + endpoint));
}
e continueLoadStamData ()
void continueLoadStamData(object sender, OpenReadCompletedEventArgs e)
{
JsonObject root = (JsonObject)JsonObject.Load(e.Result);
}
Meu problema é que quando eu chegar ao e.Result, ele lança uma exceção. É a mesma exceção recebo como quando eu tentei usar WebRequest req = ...; req.Credentials = new NetworkCredential(username, password)
:
{System.Reflection.TargetInvocationException: An exception occurred during the operation, making the result invalid. Check InnerException for exception details. ---> System.Net.WebException: An exception occurred during a WebClient request. ---> System.NotImplementedException: This property is not implemented by this class.
at System.Net.WebRequest.set_Credentials(ICredentials value)
at System.Net.WebClient.GetWebRequest(Uri address)
at System.Net.WebClient.OpenReadAsync(Uri address, Object userToken)
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---
at System.ComponentModel.AsyncCompletedEventArgs.RaiseExceptionIfNecessary()
at System.Net.OpenReadCompletedEventArgs.get_Result()
at JSONSample.MainPage.continueLoadStamData(Object sender, OpenReadCompletedEventArgs e)
at System.Net.WebClient.OnOpenReadCompleted(OpenReadCompletedEventArgs e)
at System.Net.WebClient.OpenReadOperationCompleted(Object arg)}
Você tem alguma idéia do que está acontecendo, como posso ter certeza de autenticação básica é implementada e buscar o meu pedido vai?
Felicidades
Nik
Solução
Com base no post de Mark monstro aqui que está faltando algumas linhas de código em seu método beginGet. Deve ser algo como:
private void beginGet(string endpoint, OpenReadCompletedEventHandler callback)
{
WebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);
WebClient wc = new WebClient();
wc.Credentials = new NetworkCredential(username, password);
wc.UseDefaultCredentials = false;
wc.OpenReadCompleted += callback;
wc.OpenReadAsync(new Uri(baseURL + endpoint));
}
Além disso, se você está apenas tentando obter JSON do servidor, você deve ser capaz de usar DownloadStringAsync vez de OpenReadAsync que pode simplificar as coisas.