在 asp.net mvc 中读取 api 结果

Posted

技术标签:

【中文标题】在 asp.net mvc 中读取 api 结果【英文标题】:Read api result in asp.net mvc 【发布时间】:2014-05-06 08:56:59 【问题描述】:

我尝试在 asp.net mvc 中使用天气 api。

我的代码如下:

        var url = "http://api.worldweatheronline.com/free/v1/weather.ashx?q=London&format=json&num_of_days=5&key=6b87pfhmjb7ydj6w596fujpu";
        var client = new HttpClient();

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

        var response = client.GetAsync(url).Result;

响应状态为“ok”。但是我不知道如何查看结果(作为数据或作为 xml)?

任何帮助将不胜感激。

谢谢。

【问题讨论】:

API 返回什么? 它返回这个api.worldweatheronline.com/free/v1/… 您知道如何阅读json 结构吗?您可以创建一个 ViewModel 类并将这个 json 反序列化到这个 ViewModel 中。这个结构上有很多 ViewWModel。 如果您有任何小例子,我会接受您的最佳答案。如果您能提供帮助,谢谢。 看这个答案***.com/questions/4611031/… 【参考方案1】:

您可以创建一些 ViewModel 来反序列化它,例如:

public class WeatherDesc

    public string value  get; set; 


public class WeatherIconUrl

    public string value  get; set; 


public class CurrentCondition

    public string cloudcover  get; set; 
    public string humidity  get; set; 
    public string observation_time  get; set; 
    public string precipMM  get; set; 
    public string pressure  get; set; 
    public string temp_C  get; set; 
    public string temp_F  get; set; 
    public string visibility  get; set; 
    public string weatherCode  get; set; 
    public List<WeatherDesc> weatherDesc  get; set; 
    public List<WeatherIconUrl> weatherIconUrl  get; set; 
    public string winddir16Point  get; set; 
    public string winddirDegree  get; set; 
    public string windspeedKmph  get; set; 
    public string windspeedMiles  get; set; 


public class Request

    public string query  get; set; 
    public string type  get; set; 


public class WeatherDesc2

    public string value  get; set; 


public class WeatherIconUrl2

    public string value  get; set; 


public class Weather

    public string date  get; set; 
    public string precipMM  get; set; 
    public string tempMaxC  get; set; 
    public string tempMaxF  get; set; 
    public string tempMinC  get; set; 
    public string tempMinF  get; set; 
    public string weatherCode  get; set; 
    public List<WeatherDesc2> weatherDesc  get; set; 
    public List<WeatherIconUrl2> weatherIconUrl  get; set; 
    public string winddir16Point  get; set; 
    public string winddirDegree  get; set; 
    public string winddirection  get; set; 
    public string windspeedKmph  get; set; 
    public string windspeedMiles  get; set; 


public class Data

    public List<CurrentCondition> current_condition  get; set; 
    public List<Request> request  get; set; 
    public List<Weather> weather  get; set; 


public class RootObject

    public Data data  get; set; 

要反序列化,您可以使用RootObject 作为示例:

var response = client.GetStringAsync(url);
var rootObject = JsonConvert.DeserializeObject<RootObject >(response.Result);

【讨论】:

很好的答案,但是当我设置断点时 var rootobject 说“MvcApplication1.Models.rootObject”。我需要设置列表或类似的东西吗? 我已经调整了代码,在这种情况下,请确保您引用了正确的类型。 RootObject class 是您需要反序列化的类型。使用rootObject 对象读取值。 你是最棒的!请给这个人+分。他是专家。【参考方案2】:

像这样的东西。只是另一个想法。

我刚刚尝试了不同的Api call without any Post back to Server 使用Jquery 来获取天气报告。

<script>
    $(document).ready(function () 
        $('#btnGetWeather').click(function () 
            $.post('http://api.openweathermap.org/data/2.5/weather?q=' + $('#txtCityName').val() + "," + $('#txtCountryCode').val(), function (data) 
                $('#lblTempMax').text(data.main.temp_max);
                $('#lblTempMin').text(data.main.temp_min);
                $('#lblSunRise').text(msToTime(data.sys.sunrise));
                $('#lblSunSet').text(msToTime(data.sys.sunset));
            );

            return false;
        );

        function msToTime(s) 
            var milli = s * 1000;
            return new Date(milli);
        
    );
</script>

【讨论】:

【参考方案3】:

尝试将 GetAsync 更改为

var response = await httpClient.GetStringAsync(uri);

这应该让你得到一个字符串的响应数据,如果它是 json,你只需要解析它。您需要使用 await 关键字,以便在 httpClient 返回结果之前暂停您的方法的执行。

【讨论】:

响应向我显示结果,但它在 1 行中作为字符串。我怎样才能一一获取所有值?

以上是关于在 asp.net mvc 中读取 api 结果的主要内容,如果未能解决你的问题,请参考以下文章

文件 API 文件上传 - 在 ASP.NET MVC 中读取 XMLHttpRequest

asp.net core mvc api 返回结果的json字段名大写小混乱的问题解决

ASP.NET MVC 4 中 Controller 与 ApiController 做读取新增更新删除 ( CRUD )

asp.net mvc+web api+easyui

防止在 ASP.NET MVC 中缓存 WEB API 数据

Asp.net MVC 与 Asp.net Web API 区别