Net Core 从 Openweather API 查找温度的简单方法

问题描述 投票:0回答:2

我刚刚开始编程。获取温度并将其显示在屏幕上的简单方法是什么? 我想写一个简单的程序。

static void Main()
{

    HttpClient client = new HttpClient();
    client.BaseAddress = new Uri("http://api.openweathermap.org");
    var response = client.GetAsync($"/data/2.5/weather?q=London,UK&appid={APIKey}&units=metric");

    // What do I place here??


    Console.WriteLine(Main.Temp);


}
c# api asp.net-core console asp.net-core-2.0
2个回答
3
投票

这里您需要考虑 2 个概念:

异步编程

HttpClient.GetAsync()
是一种异步方法。 Microsoft 文档 中有关于使用异步 API 的精彩演练。

但其要点是该方法不会从端点返回数据。它返回一个“承诺”;代表未来某个时间可用的数据的东西。由于您的程序没有执行任何其他操作,因此您可以直接

await
结果,如下所示:

var response = await client.GetAsync();

但是当然,您需要首先制作封闭方法

async
。根据您的情况,将
Main()
函数的签名更改为:

static async Task Main(string[] args)

JSON 反序列化

您调用的端点以 JSON 格式返回其数据。由于您刚刚学习,我不会费心去寻找实际的模式或客户端库。

您应该做的是创建一个类,其中包含响应中每个字段的属性,然后反序列化到其中,如下所示: https://www.newtonsoft.com/json/help/html/DeserializeObject.htm


0
投票

使用约翰的回答:

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {

        static async Task Main()
        {

            HttpClient client = new HttpClient();
            client.BaseAddress = new Uri("http://api.openweathermap.org");
            var response = await client.GetAsync($"/data/2.5/weather?q=London,UK&appid={APIKey}");

            // This line gives me error
            var stringResult = await response.Content.ReadAsStringAsync();

            var obj = JsonConvert.DeserializeObject<dynamic>(stringResult);
            var tmpDegreesF = Math.Round(((float)obj.main.temp * 9 / 5 - 459.67),2) ;
            Console.WriteLine($"Current temperature is {tmpDegreesF}°F");
            Console.ReadKey();
        }
      
     }
}

找到类似于netcoreapp2.1的东西 在这一行下,添加 7.1 - 这将指示 VS 和编译器检查您的代码/根据 C# 7.1 规则编译您的代码

更新:我还从上面读到,我可以创建 JSON 类来表示数据(最简单的方法是使用“编辑 | 选择性粘贴”菜单),或者反序列化为动态。

© www.soinside.com 2019 - 2024. All rights reserved.