我正在使用一个C#.NET Core控制台应用程序,该应用程序正在从URL-RPC网关中获取数据。我可以检索数据并将其写到文件中,就算遇到麻烦,甚至在我要调用的URI中增加“ page number”属性的逻辑上也遇到了一些麻烦,直到它不再返回任何数据和字符串为止“没有找到记录。”数据的每个“页面”大约有200条记录,因此,我需要增加URL中的页面号,直到它返回该字符串。
这是我的基本代码(这包括用于调试目的进行验证的控制台写入行,以后我还有其他方法将数据写入文件。)
string rpcURL;
rpcURL = "https://api.myWebsite.com/urlrpc?method=getPlacementReport&username=" + userName + "&password=" + passWord + "&class_code=" + classCode + "&from_date=" + startDate + "&to_date=" + endDate + "&page_num=1";
Console.WriteLine(rpcURL);
WebClient client = new WebClient();
client.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0)";
var stream = client.OpenRead(rpcURL);
StreamReader sr = new StreamReader(stream);
string s = sr.ReadToEnd();
Console.WriteLine(s);
[我知道我需要创建一个变量以增加末尾的“ page_num = NUMBER”部分-但我需要将其递增+1,直到流阅读器准确地读取“未找到记录”。
是否有任何建议以优雅的方式做到这一点?我知道基本上我需要使用一个递增+1计数器来执行if / then语句,但是仅此而已。
您应该能够通过简单的while
循环来完成此操作。假设StreamReader
应该返回确切的字符串No records found
,则可以使用类似于以下内容的东西。
WebClient client = new WebClient();
client.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0)";
string rpcURL;
string s = '';
int page = 0;
while (s != 'No records found') {
rpcURL = "https://api.myWebsite.com/urlrpc?method=getPlacementReport&username=" + userName + "&password=" + passWord + "&class_code=" + classCode + "&from_date=" + startDate + "&to_date=" + endDate + "&page_num=" + page;
Console.WriteLine(rpcURL);
using(var stream = client.OpenRead(rpcURL)) // both Stream and StreamReader
using(var sr = new StreamReader(stream)) // need to be disposed.
{
s = sr.ReadToEnd();
Console.WriteLine(s);
}
page++;
}