【问题标题】:Xamarin.Android - How to get JSON from websiteXamarin.Android - 如何从网站获取 JSON
【发布时间】:2021-02-14 22:13:41
【问题描述】:

我想从站点获取 JSON 数据

什么都没有显示,Xamarin 和我从 youtube 上尝试了这 3 个,但它对我不起作用

        public void ValidateNumber()
        {
            string URL = "http://android-householdinventory-api.epizy.com/ValidateNumber.php?";
            WebClient client = new WebClient();
            Uri uri = new Uri(URL + "number=10");
            client.DownloadDataAsync(uri);
            client.DownloadDataCompleted += Client_DownloadDataCompleted;
        }

        private void Client_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
        {
            //throw new NotImplementedException();
            string json = Encoding.UTF8.GetString(e.Result);
            System.Console.WriteLine(json);
        }

        public async void Validationv2()
        {
            using (var client = new HttpClient())
            {
                var uri = "http://android-householdinventory-api.epizy.com/ValidateNumber.php?number=100";
                var Result = await client.GetStringAsync(uri);
                System.Console.WriteLine(Result);
            }
        }

        public void Validationv3()
        {
            WebClient wclient = new WebClient();
            string a = wclient.DownloadString("http://android-householdinventory-api.epizy.com/ValidateNumber.php?number=100");
            System.Console.WriteLine(a);
        }

所有结果到此:

<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("304feeb55638873348a9f20961a94049");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://android-householdinventory-api.epizy.com/ValidateNumber.php?number=10&i=1";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html>

如何解决这个问题?

我是 C# 和 Xamarin 的新手

【问题讨论】:

标签: json xamarin xamarin.android


【解决方案1】:

您的 API 服务器正在为此“http://android-householdinventory-api.epizy.com/ValidateNumber.php?number=100”端点返回 HTML 响应,这就是它在响应中显示 HTML 的原因。您必须更正服务器端的 api 响应。

【讨论】:

    【解决方案2】:

    试试这个!工作示例

    private async void btn_Login_Clicked(object sender, EventArgs e)
     {
     List<LoginDetails> UserDetails = await _services.LoginAsync(string username,    string password)
     }
    
    
    
    
      public async Task<List<LoginDetails>> LoginAsync(string username, string password)
        {
            List<LoginDetails> UserList;
            using (var client = new HttpClient())
            {
                LoginDetails Ld = new LoginDetails();
                Ld.UserName = username;
                Ld.Password = password;
                string url = "";
                //HttpClient client = new HttpClient();
                string jsonData = JsonConvert.SerializeObject(Ld);
                StringContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");
                HttpResponseMessage response = await client.PostAsync(url, content);
                string result = await response.Content.ReadAsStringAsync();
    
    
                UserList = JsonConvert.DeserializeObject<List<LoginDetails>>(result);
                //loginDetails = new ObservableCollection<LoginDetails>(UserList);
            }
            return UserList;
    
        }
    

    【讨论】:

    • 我试试,顺便问下需要传json数据吗?
    • 可以,StringContent content = new StringContent(jsonData, Encoding.UTF8, "application/json");,可以使用postman来传递数据和检查响应。
    【解决方案3】:

    我在 InfinityFree 上托管,它有 aes.js,所以它可能会导致该结果。

    这帮助我找到了解决方案

    Setting Authorization Header of HttpClient ByetHost server passing html values "Checking your browser" with JSON String

    [我在 client.GetAsync 之前添加了这个] client.DefaultRequestHeaders.Add("Cookie", "__test=; expires=; path=/");

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      • 2012-07-14
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多