菜鸟教程小白 发表于 2022-12-13 02:22:24

c# - xamarin,向服务器读取发布请求(带参数)


                                            <p><p>我正在尝试从 Xamarin(webview 应用程序)发送请求。刚才,我正在使用带有 POST 方法的简单表单从客户端发送请求。
收到请求的人:</p>

<pre><code>bool HandleShouldStartLoad (UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType)
{
            var resources = request.Url.ResourceSpecifier.Split (&#39;?&#39;);
            var method = resources ;
            if(method == &#34;test&#34;)
            {
                        //TODO
            }
}
</code></pre>

<p>刚才,我可以将参数读取为 URL,但是由于某种原因,我无法读取使用 POST 方法发送的表单数据。
如何获取请求中的键和值?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我找到了答案,我找到的唯一方法是:
如果您需要向远程服务器发出请求,您可以使用以下方法:</p>

<p><strong>您的 View.cshtml</strong></p>

<pre><code>&lt;form action=&#34;http://myaddress:3000/upload&#34; enctype=&#34;multipart/form-data&#34; method=&#34;post&#34;&gt;
&lt;input type=&#34;text&#34; name=&#34;email&#34; /&gt;
&lt;input type=&#34;text&#34; name=&#34;email&#34; /&gt;
&lt;input type=&#34;submit&#34; /&gt;
&lt;/form&gt;
</code></pre>

<p>这里你可以使用 <code>Post</code> 或 <code>Get</code> 方法,但如果你需要先处理数据,你可以使用:</p>

<pre><code>&lt;form action=&#34;hybrid:RegisterUser&#34; enctype=&#34;multipart/form-data&#34; method=&#34;GET&#34;&gt;
                &lt;input type=&#34;email&#34; name=&#34;email&#34;required=&#34;required&#34; placeholder=&#34;[email protected]&#34; class=&#34;input-register&#34; required=&#34;required&#34;/&gt;
                &lt;input type=&#34;password&#34; name=&#34;password&#34; placeholder=&#34;Password&#34; class=&#34;input-register&#34; required=&#34;required&#34;/&gt;
                &lt;br /&gt;
                &lt;input type=&#34;submit&#34; class=&#34;btn&#34; value=&#34;Register&#34; /&gt;
            &lt;/form&gt;
</code></pre>

<p><strong>您的 HybridViewController.cs</strong></p>

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

<p>**你的 RequestProcessor.cs **</p>

<pre><code>public string HttpPostRequest(string url, Dictionary&lt;string,string&gt; postParameters)
      {
            url = &#34;http://Mydomain:3000/&#34; + url;
            string postData = &#34;&#34;;
            foreach (string key in postParameters.Keys)
            {
                postData += HttpUtility.UrlEncode(key) + &#34;=&#34;
                  + HttpUtility.UrlEncode(postParameters) + &#34;&amp;&#34;;
            }

            HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
            myHttpWebRequest.Method = &#34;POST&#34;;
            byte[] data = System.Text.Encoding.ASCII.GetBytes(postData);
            myHttpWebRequest.ContentType = &#34;application/x-www-form-urlencoded&#34;;
            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 = &#34;http://Mydomain:3000/&#34; + 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(&#34;HTTP_ERROR :: The second HttpWebRequest object has raised an Argument Exception as &#39;Connection&#39; Property is set to &#39;Close&#39; :: {0}&#34;, ex.Message);
            }
            catch (WebException ex)
            {
                Out = string.Format(&#34;HTTP_ERROR :: WebException raised! :: {0}&#34;, ex.Message);
            }
            catch (Exception ex)
            {
                Out = string.Format(&#34;HTTP_ERROR :: Exception raised! :: {0}&#34;, ex.Message);
            }

            return Out;
      }
</code></pre></p>
                                   
                                                <p style="font-size: 20px;">关于c# - xamarin,向服务器读取发布请求(带参数),我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/26135148/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/26135148/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: c# - xamarin,向服务器读取发布请求(带参数)