我仍然是c#新手,我正在尝试为这个页面创建一个应用程序,它会告诉我何时收到通知(已应答,已评论等)。但现在我只是尝试对API进行一个简单的调用,它将获得用户的数据。
我正在使用Visual Studio Express 2012构建C#应用程序,(目前)您在其中输入您的用户ID,因此应用程序将使用用户ID发出请求,并显示此用户ID的统计信息。
下面是我尝试发出请求的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//Request library
using System.Net;
using System.IO;
namespace TestApplication
{
class Connect
{
public string id;
public string type;
protected string api = "https://api.stackexchange.com/2.2/";
protected string options = "?order=desc&sort=name&site=stackoverflow";
public string request()
{
string totalUrl = this.join(id);
return this.HttpGet(totalUrl);
}
protected string join(string s)
{
return api + type + "/" + s + options;
}
protected string get(string url)
{
try
{
string rt;
WebRequest request = WebRequest.Create(url);
WebResponse response = request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
rt = reader.ReadToEnd();
Console.WriteLine(rt);
reader.Close();
response.Close();
return rt;
}
catch(Exception ex)
{
return "Error: " + ex.Message;
}
}
public string HttpGet(string URI)
{
WebClient client = new WebClient();
// Add a user agent header in case the
// requested URI contains a query.
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
Stream data = client.OpenRead(URI);
StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
data.Close();
reader.Close();
return s;
}
}
}
类是一个对象,并且通过仅解析用户ID并进行请求就可以从表单访问它。
我已经尝试了许多的例子,我已经在谷歌上看,但不知道为什么我得到了所有的方式这个消息“。
我是新的在这种算法,如果任何人可以分享一本书或教程,显示如何做这种东西(解释每一步),我会很感激
5条答案
按热度按时间6pp0gazn1#
如果使用**.NET 6**或更高版本,请阅读此答案底部的警告。
服务器有时候会压缩响应以保存带宽,当这种情况发生时,你需要在读取响应之前解压缩它。幸运的是,.NET框架可以自动完成这一操作,但是,我们必须打开该设置。
这里有一个例子可以说明如何实现这一点。
得到
获取异步
邮寄
method
*异步后
method
*警告通知:此答案中概述的HTTP请求方法使用
HttpWebRequest
类,从.NET 6及更高版本开始,该类已弃用。对于依赖**.NET 6+**的环境,建议使用HttpClient
,而此answer by DIG涵盖了该类。参考:https://learn.microsoft.com/en-us/dotnet/core/compatibility/networking/6.0/webrequest-deprecated
wqsoz72f2#
另一种方法是像这样使用“HttpClient”:
检查堆栈溢出中的HttpClient vs HttpWebRequest和其它堆栈中的this。
***2020年6月22日更新:***不建议在“using”块中使用httpclient,因为这可能导致端口耗尽。
如果使用的是.Net Core 2.1+,请考虑使用IHttpClientFactory并在启动代码中这样注入。
ntjbwcob3#
最简单的方式来表达我的意见
或
jjhzyzn04#
gk7wooem5#
添加到已经给出的响应,这是一个完整的例子击中JSON PlaceHolder网站。