c# - 如何在 C# 中创建一个将生成 HTTP 响应主体行的迭代器?

标签 c# .net http stream request

我得到的最接近的是

public async Task<IEnumerable<dynamic>> GetResults(string id, int n) {
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", "Token " + token);
    Stream results = await client.GetStreamAsync(baseurl + id + "/results");

    StreamReader sr = new StreamReader(results);
    while(!sr.EndOfStream) {
        string line = await sr.ReadLineAsync();
        yield return Json.Decode(line);
    }
}

但它说它不能是迭代器 block ,因为 System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<dynamic>>不是迭代器接口(interface)类型。

但是,我找不到没有异步方法的方法来获取流(我只能找到 GetStreamAsync,没有 GetStream 的定义),这迫使我有一个异步方法,这迫使我返回一个任务。

最佳答案

设法使用 WebRequest 类并按照该页面上的示例进行操作:

public IEnumerable<dynamic> GetResults(string id, int n) {

    WebRequest request = WebRequest.Create(baseurl + id + "/results");
    request.Headers.Add("Authorization", "Token " + token);
    WebResponse response = request.GetResponse();
    Stream responseStream = response.GetResponseStream();

    StreamReader sr = new StreamReader(responseStream);
    while(!sr.EndOfStream) {
        string line = sr.ReadLine();
        yield return Json.Decode(line);
    }
}

WebResponse 有一个 GetResponseStream,而 HttpClient 只有一个 GetStreamAsync。这使我不必等待,也不必使用异步方法。

关于c# - 如何在 C# 中创建一个将生成 HTTP 响应主体行的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24828091/

相关文章:

c# - 基于分组的WCF服务响应设计c#

c# - 如何阻止 VS2015 将 my.csproj 转换为 .sqlproj?

java - Crawler4j 身份验证不起作用

node.js - 来自多个调用的流式 http 响应

c# - 这是否使用字典线程安全?

c# - 表中最后一条记录的ID

c# - Visual Studio : can't find "resource file" in list of items to add to project

.net - 用 VBA 实现无限及超越

C# 测试字符串是否为整数?

java - 在java中解析http响应字节