微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin.Android-如何从网站获取JSON

如何解决Xamarin.Android-如何从网站获取JSON

我想从网站获取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的新手

解决方法

尝试一下!工作示例

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;

    }
,

我在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 = /”);

,

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。