通过 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))}");

注意字符串中引号前的 $,启用 {} 插值。