使用C#调用REST API

4
我非常新手,想学习如何进行HTTP请求。虽然目前还不太了解,但我希望从非常简单的方式开始,比如只是在google.com上执行GET请求。我创建了一个命令行应用程序,并编写了以下代码。不确定需要使用哪些“usings”。
我通过写入到控制台来测试它,但是它在响应之后就无法继续执行了。能否有人给我指点一下?我想尝试一些简单的curl类似的操作以测试现有的API。感谢你的帮助。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.IO;

namespace APItest
{
    class testClass
    {
        static void Main(string[] args)
        {
            string url = "http://www.google.com";

            Console.WriteLine(url);

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            Console.ReadKey();
        }
    }
}

2
你的代码看起来很不错。request.GetResponse() 会阻塞吗?也就是说,你确定程序不仅仅是在等待 ReadKey() 中的按键吗? - Zruty
是的,它卡在了 GetResponse 上。我在那之后放了一个 Console.WriteLine 只是为了测试(出于清晰起见,上面没有显示)。 - allstar
1
如果您愿意使用 async..await,那么 HttpClient API 可能更加直观:http://msdn.microsoft.com/en-us/library/system.net.http.httpclient.aspx (例如,您只需调用 var responseBody = await new HttpClient().GetStringAsync(url);,尤其是因为您似乎已经打算使用 System.Threading.Tasks - millimoose
1
你认为这是一些环境问题,例如代理吗?如果你在Windows环境中,你是否尝试在运行代码时运行Fiddler,并查看是否有任何请求被捕获? - Stay Foolish
我似乎只有在工作时才能得到响应。当我在酒店网络上时,它对我不起作用。有什么想法吗?谢谢。 - allstar
@allstar 在酒店的网络上,代理设置可能导致其表现不同。如果他们的网络在代理后面,而你的工作网络没有(或者在另一个代理后面),那可能会阻止连接。我认为你需要设置HttpRequest对象的代理属性。这里有一个例子:链接 - Choc13
4个回答

4
我建议您使用HttpClient,它是专门为在.NET 4中更轻松地调用rest API而创建的。它还支持asyncawait
您可以像这样调用它(使用async):
async Task<HttpResponseMessage> GetGoogle() {

    HttpClient client = new HttpClient();

    Uri uri = new Uri("http://www.google.com");

    var result = await client.GetAsync(uri);

    return result;
}

2

我不建议在 .Net 中使用 HTTPWebRequest/HTTPWebResponse 来调用 Web 服务。使用 RestSharp 更加简单易用。


1
您需要的是WebClient类。它具有丰富的方法来执行大多数HTTP相关任务,下面链接到完整的文档。

WebClient MSDN


0
你需要读取响应: var stream = response.GetResponseStream(); 然后你就有了流,可以根据需要进行操作。 GetResponseStream

问题是我甚至无法通过响应行。如果在响应后添加Console.WriteLine("Testing");,它永远不会被写入控制台。 - allstar
我测试了你的代码,它运行良好...成功通过请求并到达readKey... - bluetoft

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