c#客户端请求 Server-Sent Events

发布于:2025-03-12 ⋅ 阅读:(14) ⋅ 点赞:(0)

方式1 WebClient 

 private void WebClientTest()
 {
     WebClient web = new WebClient();
     web.OpenReadCompleted += Web_OpenReadCompleted;
     web.OpenReadAsync(new Uri("http://localhost:30009/api/event/get"));
 }
 private void Web_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
 {
     using (var sr = new StreamReader(e.Result))
     {
         string line;
         while ((line = sr.ReadLine()) != null)
         {
             Console.WriteLine(line);
         }
     }
 }

方式2  HttpClient 

private async void Test3()
{
    string url = "http://localhost:30009/api/event/get";
    using (HttpClient client = new HttpClient())
    {
        client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/event-stream"));

        using (HttpResponseMessage response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead))
        {
            response.EnsureSuccessStatusCode();

            using (Stream stream = await response.Content.ReadAsStreamAsync())
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                while (!reader.EndOfStream)
                {
                    string line = await reader.ReadLineAsync();
                    if (!string.IsNullOrWhiteSpace(line))
                    {
                        Console.WriteLine($"收到数据: {line}");

                        //try
                        //{
                        //    var jsonData = JObject.Parse(line);
                        //    if (jsonData["data"] != null)
                        //    {
                        //        Console.WriteLine($"解析内容: {jsonData["data"]}");
                        //    }
                        //}
                        //catch (Exception ex)
                        //{
                        //    Console.WriteLine($"JSON 解析错误: {ex.Message}");
                        //}
                    }
                }
            }
        }
    }
}

方式2 Post请求的SSE

 public async void Test1()
 {
     var reaquest = new ChatResquest();
    
     var client = new HttpClient();
     var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost:30009/api/postsse/sseendpoint")
     {
         Content = new StringContent(JsonConvert.SerializeObject(reaquest, Formatting.Indented), Encoding.UTF8, "application/json") // SSE一般不用请求体,但POST方法需要一个Content
     };

     var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);
     var stream = await response.Content.ReadAsStreamAsync();

     using (var reader = new System.IO.StreamReader(stream))
     {
         while (!reader.EndOfStream)
         {
             var line = await reader.ReadLineAsync();
             if (!string.IsNullOrWhiteSpace(line))
             {
                 Console.WriteLine($"Received: {line}");
             }
         }
     }
 }