2016-09-06 8 views
0

WindowsPhoneでWebResponseを開いているときに問題が発生しました.WebResponseを開いても常に例外が発生します。私はさまざまな方法で試してみましたが、非同期メソッドを使用すると常に例外が発生します。 私を助けてください。Xamarin-CrossPlatform POST HttpWebRequest:リモートサーバーからエラーが返されました:NotFound

例外:

An exception of type 'System.Net.WebException' occurred in System.Net.ni.DLL but was not handled in user code Additional information: The remote server returned an error: NotFound.

private async void btLogin_Click(object sender, RoutedEventArgs e) { 
     Uri uri = new Uri("http://ip-address/users/User/jan_kowalski/a"); 
     HttpWebRequest webRequest = WebRequest.Create(uri) as HttpWebRequest; 
     webRequest.Method = "POST"; 
     webRequest.ContentType = "application/json"; 

     try { 
      using (Stream ss = await webRequest.GetRequestStreamAsync()) { 
       await ss.WriteAsync(new byte[0], 0, 0); 
       await ss.FlushAsync(); 
      } 

      //using (WebResponse webResponse = await webRequest.GetResponseAsync()) {  // <-- Here there is an exception or... 
      // using (StreamReader reader = new StreamReader(webResponse.GetResponseStream())) { 
      //  string data = await reader.ReadToEndAsync(); 
      //  Log.d(TAG, data); 
      // } 
      //} 

      webRequest.BeginGetResponse(async (x) => { 
       WebResponse webResponse = webRequest.EndGetResponse(x);   // <-- ...or here there is an exception 
       StreamReader reader = new StreamReader(webResponse.GetResponseStream()); 
       string text = await reader.ReadToEndAsync(); 
       Log.d(TAG, text); 
      }, null); 

     } catch (WebException exc) { 
      Log.e(TAG, exc.Message + " \n" + 
       exc.Source + "\n status:" + 
       exc.Status + "\n" + 
       exc.Response + " \n " + 
       exc.StackTrace); 
     } catch (Exception ex) { 
      Log.e(TAG, ex.Message + "\n stackTrace: " + ex.StackTrace); 
     } 
} 

私は、AndroidとiOSの方法、同期方法のより多くのへのアクセス権を持っていることに気づきました。彼らはそれがすべて正常に動作するように使うと、私はサーバーから正しい答えを得ます。しかし、同期メソッドは、Windowsの電話で利用できません!

  Uri uri = new Uri("http://ip-address/users/User/jan_kowalski/a"); 
      WebRequest webRequest = WebRequest.Create(uri); 
      webRequest.Method = "POST"; 
      webRequest.ContentType = "application/json"; 
      try { 
       using (Stream stream = webRequest.GetRequestStream()) { 
        stream.Write(new byte[0], 0, 0); 
       } 
       using (WebResponse stream = webRequest.GetResponse()) { 
        using (StreamReader reader = new StreamReader(stream.GetResponseStream())) { 
         string data = reader.ReadToEnd(); 
         Console.WriteLine(data); 
        } 
       } 
      }catch(Exception ex) { 
       Log.e(TAG, null, ex); 
      } 

答えて

0

私はあなたがのHttpClientをしようと提案し、インターフェースはそんなにきれいWebRequestクラスより:

var client = new HttpClient(); 
var res = await client.PostAsync("http://ip-address/users/User/jan_kowalski/a", new StringContent("hello, world")); 
if (res.IsSuccessStatusCode) 
{ 
    var response = await res.Content.ReadAsStringAsync(); 
} 

私はHttpClientをして、あなたの問題を再現できませんでした。

関連する問題