c# - xamarin,向服务器读取发布请求(带参数)
<p><p>我正在尝试从 Xamarin(webview 应用程序)发送请求。刚才,我正在使用带有 POST 方法的简单表单从客户端发送请求。
收到请求的人:</p>
<pre><code>bool HandleShouldStartLoad (UIWebView webView, NSUrlRequest request, UIWebViewNavigationType navigationType)
{
var resources = request.Url.ResourceSpecifier.Split ('?');
var method = resources ;
if(method == "test")
{
//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><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>
</code></pre>
<p>这里你可以使用 <code>Post</code> 或 <code>Get</code> 方法,但如果你需要先处理数据,你可以使用:</p>
<pre><code><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>
</code></pre>
<p><strong>您的 HybridViewController.cs</strong></p>
<pre><code>if (method == "RegisterUser")
{
RequestProcessor rp = new RequestProcessor();
var parameters = System.Web.HttpUtility.ParseQueryString (resources );
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);
}
</code></pre>
<p>**你的 RequestProcessor.cs **</p>
<pre><code>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) + "&";
}
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;
}
</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]