【问题标题】:Using http client to send header and content via post使用 http 客户端通过 post 发送标头和内容
【发布时间】:2018-06-15 03:10:42
【问题描述】:

我正在对 API 进行非常简单的调用以接收一些数据。我需要发送标题以获得授权,我还需要在正文上发送一些内容。这就是我想出的:

public async Task<List<LoremIpsum>> LoremIpsumJson()
    {
        LoremIpsum1 data = null;
        try
        {
            var client = new HttpClient();
            //now lets add headers . 1.method, 2.token
            client.DefaultRequestHeaders.Add("Method", "LoremIpsumExample");
            client.DefaultRequestHeaders.Add("Token", "sometoken");
            HttpContent content = new StringContent("{\"Name\":\"John\",\"Surname\":\"Doe\",\"Example\":\"SomeNumber\"}", Encoding.UTF8, "application/json");
            // ==edit==
             client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var response = await client.PostAsync("www.theUrlToTheApi", content);
            response.EnsureSuccessStatusCode();
            string json = await response.Content.ReadAsStringAsync();
            data = JsonConvert.DeserializeObject<QueueInfo>(json);
        }
        catch(Exception ex)
        {
            Debug.WriteLine(ex.Message.ToString());
        }
        return data.data;
        Debug.WriteLine(data.data);
    }

应用程序在response.EnsureSuccessStatusCode(); 之后中断,因为请求显然不成功。 我想我真的错过了一些非常简单的东西。我该怎么打这个电话? 错误是

状态代码:406,原因短语:“不可接受”

【问题讨论】:

    标签: c# asp.net json http xamarin


    【解决方案1】:

    这不起作用的原因可能有很多。例如:keyvalues.ToString() 很可能没有输入您想要的值。似乎您可能需要序列化为 json 而不仅仅是调用.ToString()

    首先使用postman 之类的工具并让它在那里工作,这样你就有一个工作示例,然后尝试在C# 中重新创建。它会让你的生活更轻松。

    【讨论】:

    • 我已经让它和邮递员一起工作了。似乎我无法在代码中做到这一点。我也试过这条线HttpContent content = new StringContent("{\"Name\":\"John\",\"Surname\":\"Doe\",\"Example\":\"SomeNumber\"}", Encoding.UTF8, "application/json");,我看到它就像一个在SO中滚动的解决方案。 @pmcilreavy
    • @John 也许在您的问题中包含您工作邮递员请求的屏幕截图。这可能有助于 SO 得出答案..
    • 如果你想做这样的事情,你会怎么做?!即:发送一些标头,以及带有 post 请求的正文中的一些内容。同样在响应代码中,当我指定application/json 时,我注意到标题中有一个Content-Type: text/html。知道为什么会这样吗? @pmcilreavy
    • @John 你可能想看看 RestSharp 库,它让这些事情变得容易多了。 restsharp.org
    【解决方案2】:

    适合所有来这里寻找解决方案的人。 HttpContent 不能采用标题,更不用说内容类型。添加应该以这种方式添加到 HttpClient 中的 content-type 时有一个错字:

    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    

    【讨论】:

      猜你喜欢
      • 2011-11-16
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 2019-03-14
      • 2016-02-15
      • 2021-08-09
      • 2013-12-07
      • 2019-04-23
      相关资源
      最近更新 更多