【问题标题】:C# Web API callC# Web API 调用
【发布时间】:2015-03-24 02:13:55
【问题描述】:

这是我第一次尝试调用 API,但我有点挣扎。我不断收到错误消息,我计划使用 json 响应来填充我的对象。 OMDB api 说明在这里(虽然没有帮助):http://www.omdbapi.com/

private static async Task RunAsync()
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://www.omdbapi.com/?");
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = client.GetAsync("t=Captain+Phillips&r=json").Result;

        if (response.IsSuccessStatusCode)
        {
            Console.WriteLine("Success");
        }
        else
        {
            Console.WriteLine("Error with feed");
        }
    }
}

【问题讨论】:

  • 你遇到了什么错误?

标签: c# json api


【解决方案1】:

您将问号 (?) 放在了错误的位置。试试这样:

private static async Task RunAsync()
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://www.omdbapi.com");
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        HttpResponseMessage response = await client.GetAsync("?t=Captain+Phillips&r=json");

        if (response.IsSuccessStatusCode)
        {
            Console.WriteLine("Success");
        }
        else
        {
            Console.WriteLine("Error with feed");
        }
    }
}

注意这里是问号:

HttpResponseMessage response = await client.GetAsync("?t=Captain+Phillips&r=json");

而不是您放置的基本网址。

此外,为了正确编写您的异步方法,您需要在其内部使用await,而不是急切地调用.Result 属性,这当然是一个阻塞操作。

【讨论】:

  • 它在哪里说它将 QueryString 部分联系到基地址。我看过here,但它说的是URI。但是说它将QS附加到基础的官方文档在哪里? (在 GetAsync 中)
  • @RoyiNamir,我不太确定是否有官方文档。只需查看 Fiddler 即可了解幕后发生的事情以及发送的确切 HTTP 请求。
猜你喜欢
  • 1970-01-01
  • 2020-10-02
  • 2019-06-14
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多