2014-10-01 38 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; 
     }