需要从 URL 中读取流,更改 URI 中的 "page" 属性直到它成为 returns "No records found" 字符串

Need to read a stream from a URL, changing a "page" attribute in URI until it returns "No records found" string

我有一个 C# .NET Core 控制台应用程序,我正在致力于从 URL-RPC 网关获取数据。我可以检索数据并将其写入一个文件就好了——只是在开始逻辑上遇到了一些麻烦,以增加我调用的 URI 中的 "page number" 属性,直到它 returns 没有更多数据和字符串 "No records found." 每个 "page" 数据大约有 200 条记录,因此我需要增加 URL 中的页码,直到 returns 该字符串。

这是我的基本代码(这包括用于验证调试目的的控制台写入行,稍后我还有其他方法可以将数据写入文件。)

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,直到流 reader 完全读取 "No records found"。

关于优雅的方法有什么建议吗?我知道 基本上 我需要做一个带有递增 +1 计数器的 if/then 语句,但仅此而已。

您应该可以通过简单的 while 循环来完成此操作。假设 StreamReader 预计 return 确切的字符串 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++;
}