سؤال

ألعب مع Silverlight 4، وأنا عندما الأحمال صفحتي، أدعو

beginGet("my/people/", new OpenReadCompletedEventHandler(continueLoadStamData));

أنني قد حددت كما

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));
}

و penalueloadstamdata ()

void continueLoadStamData(object sender, OpenReadCompletedEventArgs e)
{
  JsonObject root = (JsonObject)JsonObject.Load(e.Result);
}

مشكلتي هي أنه عندما أصل إلى e.Result، فإنه يلقي استثناء. هذا هو نفس الاستثناء الذي أحصل عليه عندما حاولت استخدام 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)}

هل لديك أي فكرة عما يحدث، وكيف يمكنني التأكد من تنفيذ المصادقة الأساسية والحصول على طلبي؟

هتافات

نيك

هل كانت مفيدة؟

المحلول

مرتكز على مارك مونستر آخر هنا أنت تفتقد بعض خطوط التعليمات البرمجية في طريقة البدء. يجب أن يكون شيء مثل:

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));
}

أيضا، إذا كنت تحاول فقط الحصول على JSON من الخادم، يجب أن تكون قادرا على استخدام DownloadStringAsync بدلا من OpenReadasyNC والتي قد تبسط الأشياء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top