首页 > 解决方案 > 渲染/反序列化 http 请求

问题描述

我是 C# 新手,不知道如何呈现 http 请求。我试图理解我在下面分享的一段代码,但不明白其中发生了什么。如果有人可以帮助代码尝试执行的操作,并且如果有一种方法可以更有效地执行此操作,而不是编写 50 行代码,那将会很有帮助。

StringBuilder builder = new StringBuilder();
byte[] buffer = ArrayPool<byte>.Shared.Rent(4096);
List<string> results = new List<string>();

while (true)
{
   // Request is http request
   var bytesRemaining = await this.Request.Body.ReadAsync(buffer, offset: 0, buffer.Length).ConfigureAwait(false);

   if (bytesRemaining == 0)
   {
       results.Add(builder.ToString());
       break;
   }

   // Instead of adding the entire buffer into the StringBuilder
   // only add the remainder after the last \n in the array.
   var prevIndex = 0;
   int index;
   while (true)
   {
       index = Array.IndexOf(buffer, (byte)'\n', prevIndex);
       if (index == -1)
       {
           break;
       }
       var encodedString = Encoding.UTF8.GetString(buffer, prevIndex, index - prevIndex);
       if (builder.Length > 0)
       {
           // If there was a remainder in the string buffer, include it in the next string.
           results.Add(builder.Append(encodedString).ToString());
           builder.Clear();
       }
       else
       {
           results.Add(encodedString);
       }
       // Skip past last \n
       prevIndex = index + 1;
   }

   var remainingString = Encoding.UTF8.GetString(buffer, prevIndex, bytesRemaining - prevIndex);
   builder.Append(remainingString);
}

标签: c#httprequest

解决方案


推荐阅读