Xamarin Forms HttpClient PostAsync不返回响应 [英] Xamarin Forms HttpClient PostAsync does not return response

查看:415
本文介绍了Xamarin Forms HttpClient PostAsync不返回响应的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过传递服务url和json参数来获取API响应.网址和参数已正确传递给 requestAPI 函数,但没有提供 PostAsync 方法的响应.网址是API位置,参数是类别ID.当我在浏览器中运行相同的API时,它会给出正确的响应.但不在应用程序中.

I'm trying to get API response by passing service url and json parameter. Url and Parameter passing properly to the requestAPI function, but doesn't give response from PostAsync method. Url is the API location, parameter is the Category Id. When I'm running same API in the browser, it gives correct response. But not in app.

这是 requestAPI 函数.

public async Task<ResponseObject> requestAPI(string urlString, string jsonParameters)
        {
            await Task.Delay(2000); // NOTE: just to simulate a HTTP request over the wire

            try
            {
                var json = JsonConvert.SerializeObject(jsonParameters);
                HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json");

                HttpResponseMessage response = null;

                if (true)       // no issue here.
                {                                                    
                    response = await client.PostAsync(urlString, httpContent);
                }
                else
                {
                    response = await client.PutAsync(urlString, httpContent);
                }

                if (response.IsSuccessStatusCode)
                {
                    Debug.WriteLine(@"              TodoItem successfully saved.");
                    var returnVal = await response.Content.ReadAsStringAsync();
                    return new ResponseObject{
                        jsonString = returnVal,
                        isSuccess = true,
                        error = null
                    };
                }
                else
                {
                    return new ResponseObject
                    {
                        jsonString = null,
                        isSuccess = false,
                        error = null
                    };
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(@"              ERROR {0}", ex.Message);
                return new ResponseObject
                {
                    jsonString = null,

                    isSuccess = false,
                    error = null
                };
            }
        }

类别ID来自此方法.

private async void loadBookList(string categoryId)
        {
            IsBusy = true;

            if (CrossConnectivity.Current.IsConnected)
            {
                ResponseObject responseObject = await _apiService.requestAPI("http://192.168.0.35/kiyawamu-api/index.php/rest/V1/mobileappintegration/getbookdetailsbycategory", Convert.ToString(categoryId));

                if (responseObject.isSuccess)
                {
                    var jsonObject = JsonConvert.DeserializeObject<BookListJsonObject>(responseObject.jsonString);
                    CategoryBooks = new ObservableCollection<Book>(jsonObject.booksByCategory);
                }
                else
                {
                    giveAlertForCommonError();
                }
            }
        }

我尝试了以下解决方案,但不起作用.

I tried following solutions, but doesn't work.

  1. 用作uri的网址var uri = new Uri(urlString);
  2. jsonParameter也用作字符串
  3. 还使用了
  4. GetAsync
  1. Url used as a uri var uri = new Uri(urlString);
  2. jsonParameter also used as a string
  3. GetAsync also used

在此方面的任何帮助将不胜感激.

Any assistance on this will be greatly appreciated.

推荐答案

如果您正在Android上运行它,并且代码在PCL中,请尝试添加ModernHttpClient,以便可以使用本机HttpClientHandler.

If you're running it on Android and the code is in a PCL, try to add ModernHttpClient so you can use the native HttpClientHandler.

https://github.com/paulcbetts/ModernHttpClient

但是我也建议所有人从PCL升级到.NET标准.如果这样做,则不必安装NuGet包即可使用HttpCliennt.然后,您可以在项目设置中选择HttpClientHandler的实现.

But I also recommend all to upgrade from PCL to .NET standard. If you do so you don't have to install a NuGet package to use HttpCliennt. And then you can select implementation of HttpClientHandler in project settings.

这篇关于Xamarin Forms HttpClient PostAsync不返回响应的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆