如何使用ASP.NET MVC进行HTTP调用?

5

我想做什么:

我想在一个简单的ASP.NET MVC Web应用程序中练习发起HTTP请求(如果这是它的名称)。为此,我尝试从OpenWeatherMap获取天气详情。您可以通过以下方式实现:

  • 将以下参数添加到GET请求中:APPID=APIKEY
    • 示例:api.openweathermap.org/data/2.5/forecast/city?id=524901&APPID=1111111111

我从学习中所理解的:

  • 控制器会进行上述HTTP请求。

我的问题:

  • 在ASP.NET MVC中,我该如何实际发起HTTP GET请求?

编辑:我知道有很多方法,那么有一个“简单、容易”的方法来开始吗? - daCoda
1
如果您的意思是想从代码内部发起HTTP调用,由服务器端应用程序调用,那么请注意这与MVC实际上没有任何关系。任何.NET代码都可以使用像HttpClient这样的对象来发起HTTP请求并接收响应。MVC是您的代码的前端应用程序宿主,但您正在谈论可以从任何应用程序宿主中调用的后端.NET代码。 - David
1个回答

11

使用System.Net.Http.HttpClient

你可以使用以下代码从网站进行一些基本的读取:

using (var client = new HttpClient())
{
    var uri = new Uri("http://www.google.com/");

    var response = await client.GetAsync(uri);

    string textResult = await response.Content.ReadAsStringAsync();
}

在解析数据之前,您可能希望确保测试 response.IsSuccessStatusCode(检查HTTP 200结果)以确保结果符合您的预期。


我的主要关注点在于以下这几行代码: var response = await client.GetAsync("http://www.google.com"); string content = await response.Content.ReadAsStringAsync(); Console.WriteLine(content);谢谢。 - daCoda
CS4033:“'await'运算符只能在异步方法中使用。请考虑使用'async'修饰符标记此方法,并将其返回类型更改为'Task'。”那么,围绕此代码的方法声明是什么样子的,以及在相应的return语句中使用的有效Task<T>值是什么? - NetXpert
此外,client.GetAsync(uri)返回类型为Task<HttpResponseMessage>的值,该值既没有Content字段也没有IsSuccessStatusCode字段。在VS2022/.Net-7.0下,这个“答案”甚至不是有效的代码,更不用说是一个“解决方案”了。 - NetXpert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接