Search code examples
c#httpclientrestsharp

Get stream with RestSharp as it's being streamed from the server


My server constantly streaming data and I want to read it on C# app. I found that I can use RestRequest.ResponseWriter but it's only called once when the server done streaming. How do I get data as it's coming in? Do I need to use DownloadDataAsync method or something else? Or, maybe RestSharp cannot do this and I need to switch to HttpClient?

var restClient = new RestClient("http://127.0.0.1:8000/my_api");
var request = new RestRequest("get_data");
request.ResponseWriter = (responseStream) =>
{
     var reader = new StreamReader(responseStream, Encoding.UTF8);
     var res = reader.Read();
     Console.WriteLine(res);
     return responseStream;
};
await restClient.DownloadDataAsync(request);

Solution

  • I was able to get data from the stream with RestSharp, while it's being streamed from the server, as shown below:

    var restClient = new RestClient("http://127.0.0.1:8000/my_api");
    var request = new RestRequest("get_data");
    var stream = await restClient.DownloadStreamAsync(request);
    using var reader = new StreamReader(stream, Encoding.UTF8);
    while (true)
    {
        var res = await reader.ReadLineAsync();
        // Process response
        ...
    }