在 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 )