【问题标题】:Get request not working for "&" while sending data over url though Xamarin Android通过 Xamarin Android 通过 url 发送数据时获取请求不适用于“&”
【发布时间】:2016-10-11 17:14:27
【问题描述】:

我在 Android Spinner 中的数据很少。虽然通过微调器选择项目,但我想通过 Get 请求检查它们是否在 DB 中可用。我可以检查我的 Spinner 项目中的几乎所有项目,除了那些里面有“&”的项目。 示例:我可以检查“A”或“A 和 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
        {

        }

【问题讨论】:

  • 你应该对字符串进行urlEncode

标签: c# android xamarin.android html-encode


【解决方案1】:

查询字符串中的& 字符用作参数之间的分隔符。这就是为什么当您使用包含 & 的参数值或名称发出 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))}");

注意字符串中引号前的$,以便使用{} 进行插值。

【讨论】:

  • 谢谢 :) 先生。尽管当时我的转换不起作用:(
猜你喜欢
  • 2011-06-10
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2015-07-22
  • 2017-10-24
相关资源
最近更新 更多