通过 url 通过 Xamarin Android 发送数据时获取请求不适用于“&”
Get request not working for "&" while sending data over url though Xamarin Android
我在 Android Spinner 中的数据很少。虽然 select 项虽然是微调器,但我想检查它们是否在 DB 中可用并带有 Get 请求。我可以检查 Spinner 项目中的几乎所有项目,但其中包含“&”的项目除外。
示例:我可以检查 "A" 或 "A and B" 或 "A-B"
但是 我无法检查 "A & B" 类型的字符串。
这是我的代码。
Spinner spinner = (Spinner)sender;
var routetext = spinner.GetItemAtPosition(e.Position).ToString();
var mainroutetext = Android.Text.TextUtils.HtmlEncode(routetext);
try
{
HttpClient client = new HttpClient();
var uri = new Uri(string.Format("http://www.codexen.net/api/Android/getrouteid?name=" + spinner.GetItemAtPosition(e.Position).ToString()));
HttpResponseMessage response; ;
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
response = await client.GetAsync(uri);
if (response.StatusCode == System.Net.HttpStatusCode.Accepted)
{
var errorMessage1 = response.Content.ReadAsStringAsync().Result.Replace("\", "").Trim(new char[1] { '"' });
Toast.MakeText(this, errorMessage1, ToastLength.Long).Show();
}
else
{
Toast.MakeText(this, "Failed", ToastLength.Long).Show();
}
}
catch
{
}
查询字符串中的&
字符用作参数之间的分隔符。这就是为什么当您使用包含 &
的参数值或名称发出 GET 请求时,它会失败。为避免这种情况,您需要 URL Encode 您的字符串。
在您的请求中发送之前,请使用此方法对您的字符串进行 urlencode。
https://msdn.microsoft.com/es-es/library/zttxte6w(v=vs.110).aspx
var uri = new Uri(string.Format("http://www.codexen.net/api/Android/getrouteid?name={0}",HttpServerUtility.UrlEncode(spinner.GetItemAtPosition(e.Position))));
另外,请注意我们使用字符串。由于“字符串池”问题而格式化。您在字符串中使用 {0} {1}
等占位符,然后附加您希望作为参数打印的变量。
编辑 C#6。
从 C# v.6 开始,您可以改用更方便的字符串插值语法:
var uri = new Uri($"http://www.codexen.net/api/Android/getrouteid?name={HttpServerUtility.UrlEncode(spinner.GetItemAtPosition(e.Position))}");
注意字符串中引号前的 $
,启用 {}
插值。
我在 Android Spinner 中的数据很少。虽然 select 项虽然是微调器,但我想检查它们是否在 DB 中可用并带有 Get 请求。我可以检查 Spinner 项目中的几乎所有项目,但其中包含“&”的项目除外。 示例:我可以检查 "A" 或 "A and B" 或 "A-B" 但是 我无法检查 "A & B" 类型的字符串。 这是我的代码。
Spinner spinner = (Spinner)sender;
var routetext = spinner.GetItemAtPosition(e.Position).ToString();
var mainroutetext = Android.Text.TextUtils.HtmlEncode(routetext);
try
{
HttpClient client = new HttpClient();
var uri = new Uri(string.Format("http://www.codexen.net/api/Android/getrouteid?name=" + spinner.GetItemAtPosition(e.Position).ToString()));
HttpResponseMessage response; ;
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
response = await client.GetAsync(uri);
if (response.StatusCode == System.Net.HttpStatusCode.Accepted)
{
var errorMessage1 = response.Content.ReadAsStringAsync().Result.Replace("\", "").Trim(new char[1] { '"' });
Toast.MakeText(this, errorMessage1, ToastLength.Long).Show();
}
else
{
Toast.MakeText(this, "Failed", ToastLength.Long).Show();
}
}
catch
{
}
查询字符串中的&
字符用作参数之间的分隔符。这就是为什么当您使用包含 &
的参数值或名称发出 GET 请求时,它会失败。为避免这种情况,您需要 URL Encode 您的字符串。
在您的请求中发送之前,请使用此方法对您的字符串进行 urlencode。
https://msdn.microsoft.com/es-es/library/zttxte6w(v=vs.110).aspx
var uri = new Uri(string.Format("http://www.codexen.net/api/Android/getrouteid?name={0}",HttpServerUtility.UrlEncode(spinner.GetItemAtPosition(e.Position))));
另外,请注意我们使用字符串。由于“字符串池”问题而格式化。您在字符串中使用 {0} {1}
等占位符,然后附加您希望作为参数打印的变量。
编辑 C#6。
从 C# v.6 开始,您可以改用更方便的字符串插值语法:
var uri = new Uri($"http://www.codexen.net/api/Android/getrouteid?name={HttpServerUtility.UrlEncode(spinner.GetItemAtPosition(e.Position))}");
注意字符串中引号前的 $
,启用 {}
插值。