2014-10-01 39 views
2

我試圖從Xamarin(webview應用程序)發送請求。就在現在,我使用POST方法以簡單的形式發送客戶請求。 的請求被接受:xamarin,閱讀請求(帶參數)到服務器

bool HandleShouldStartLoad (UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType) 
{ 
      var resources = request.Url.ResourceSpecifier.Split ('?'); 
      var method = resources [0]; 
      if(method == "test") 
      { 
         //TODO 
      } 
} 

剛纔,我可以讀取參數,URL,但由於某些原因,我無法讀取我用POST方法的形式發送的數據。 如何獲得請求中的鍵和值?

回答

1

我找到答案,我發現是唯一的方法: 如果你需要做的請求到遠程服務器,您可以使用類似做到這一點:

你View.cshtml

<form action="http://myaddress:3000/upload" enctype="multipart/form-data" method="post"> 
<input type="text" name="email" /> 
<input type="text" name="email" /> 
<input type="submit" /> 
</form> 

在這裏,你可以使用一個PostGet方法,但是如果你需要先處理這些數據,您可以使用:

<form action="hybrid:RegisterUser" enctype="multipart/form-data" method="GET"> 
       <input type="email" name="email" required="required" placeholder="[email protected]" class="input-register" required="required"/> 
       <input type="password" name="password" placeholder="Password" class="input-register" required="required"/> 
       <br /> 
       <input type="submit" class="btn" value="Register" /> 
      </form> 

你HybridViewController.cs

if (method == "RegisterUser") 
{ 
       RequestProcessor rp = new RequestProcessor(); 
       var parameters = System.Web.HttpUtility.ParseQueryString (resources [1]); 
       Dictionary<string,string> requestParams = new Dictionary<string,string>(); 
       string email = parameters["email"]; 
       requestParams.Add ("email", email) 
       rp.HttpPostRequest("users/add", requestParams); 
       rp.HttpGetRequest("users/add?email" + email); 
} 

**你RequestProcessor.cs **

public string HttpPostRequest(string url, Dictionary<string,string> postParameters) 
     { 
      url = "http://Mydomain:3000/" + url; 
      string postData = ""; 
      foreach (string key in postParameters.Keys) 
      { 
       postData += HttpUtility.UrlEncode(key) + "=" 
        + HttpUtility.UrlEncode(postParameters[key]) + "&"; 
      } 

      HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url); 
      myHttpWebRequest.Method = "POST"; 
      byte[] data = System.Text.Encoding.ASCII.GetBytes(postData); 
      myHttpWebRequest.ContentType = "application/x-www-form-urlencoded"; 
      myHttpWebRequest.ContentLength = data.Length; 
      Stream requestStream = myHttpWebRequest.GetRequestStream(); 
      requestStream.Write(data, 0, data.Length); 
      requestStream.Close(); 
      HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
      Stream responseStream = myHttpWebResponse.GetResponseStream(); 
      StreamReader myStreamReader = new StreamReader(responseStream, System.Text.Encoding.Default); 
      string pageContent = myStreamReader.ReadToEnd(); 
      myStreamReader.Close(); 
      responseStream.Close(); 
      myHttpWebResponse.Close(); 
      return pageContent; 
     } 

     public string HttpGetRequest(string Url) 
     { 
      string Out = String.Empty; 
      Url = "http://Mydomain:3000/" + Url; 
      System.Net.WebRequest req = System.Net.WebRequest.Create(Url); 
      try 
      { 
       System.Net.WebResponse resp = req.GetResponse(); 
       using (System.IO.Stream stream = resp.GetResponseStream()) 
       { 
        using (System.IO.StreamReader sr = new System.IO.StreamReader(stream)) 
        { 
         Out = sr.ReadToEnd(); 
         sr.Close(); 
        } 
       } 
      } 
      catch (ArgumentException ex) 
      { 
       Out = string.Format("HTTP_ERROR :: The second HttpWebRequest object has raised an Argument Exception as 'Connection' Property is set to 'Close' :: {0}", ex.Message); 
      } 
      catch (WebException ex) 
      { 
       Out = string.Format("HTTP_ERROR :: WebException raised! :: {0}", ex.Message); 
      } 
      catch (Exception ex) 
      { 
       Out = string.Format("HTTP_ERROR :: Exception raised! :: {0}", ex.Message); 
      } 

      return Out; 
     }