使用Post Request检索数据并返回List

时间:2017-12-17 22:04:59

标签: c# post xamarin xamarin.forms

我正在研究有关xamarin的个人项目。所以基本上我要做的就是从某些api获取一些数据。所以方法必须是" POST"并发送一些标题。响应应该是令牌和事物列表。我试着绕过这个问题,但我无法解决这个问题。 我搜索了很多,发现了一些帮助我使用我的代码到达这里的东西:

public async Task<List<Things>> GetThingsAsync()
    {
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("xxx", "xxx");
        client.DefaultRequestHeaders.Add("xxx", xxx);

        HttpContent content = new StringContent("");
        content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        var json = await client.PostAsync("https://blabla/bla/", content);

        var br = JsonConvert.DeserializeObject<List<Things>>(json);
        return br;

    }

返回br会产生此错误:

  

错误CS1503参数1:无法转换   &#39; System.Net.Http.HttpResponseMessage&#39;到&#39;字符串&#39;

我尝试使用JsonSerializerSettings,但我无法弄明白。所以,我是谁在正确的轨道?我错过了什么或者这种做法完全错了吗?!在此先感谢。

杰森的回答解决了这个案子。现在关于导航到另一个页面我使用这个命令:

public ICommand GetThingsCommand
    {
        get
        {
            return new Command(async () =>
            {
                things = await _apiServices.GetThingsAsync();
                await Application.Current.MainPage.Navigation.PushAsync(new SinglePage());
            });
        }
    }

数据的绑定必须在SinglePage上进行,但是当我返回br

时它会引发异常

1 个答案:

答案 0 :(得分:1)

PostAsync会返回HttpResponseMessage,您可以使用它来检索回复的实际内容

    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("xxx", "xxx");
    client.DefaultRequestHeaders.Add("xxx", xxx);

    HttpContent content = new StringContent("");
    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

    var response = await client.PostAsync("https://blabla/bla/", content);

    response.EnsureSuccessStatusCode();

    string json = await response.Content.ReadAsStringAsync();
    var br = JsonConvert.DeserializeObject<List<Things>>(json);
    return br;