diff --git a/src/Servers/EffinitiveServer/EffinitiveServer.csproj b/src/Servers/EffinitiveServer/EffinitiveServer.csproj
index ae94e20..1a02cca 100644
--- a/src/Servers/EffinitiveServer/EffinitiveServer.csproj
+++ b/src/Servers/EffinitiveServer/EffinitiveServer.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/src/Servers/EffinitiveServer/Program.cs b/src/Servers/EffinitiveServer/Program.cs
index 210f6d5..aec4407 100644
--- a/src/Servers/EffinitiveServer/Program.cs
+++ b/src/Servers/EffinitiveServer/Program.cs
@@ -1,3 +1,4 @@
+using System.Buffers;
using System.Text;
using EffinitiveFramework.Core;
using EffinitiveFramework.Core.Http;
@@ -35,10 +36,23 @@ sealed class PostRoot : NoRequestEndpointBase
protected override string Route => "/";
protected override string ContentType => Helpers.TextPlain;
- public override ValueTask HandleAsync(CancellationToken ct = default)
+ public override async ValueTask HandleAsync(CancellationToken ct = default)
{
+ if (HttpContext?.BodyDeferred == true && HttpContext.BodyStream != null)
+ {
+ using var ms = new MemoryStream();
+ var buf = ArrayPool.Shared.Rent(4096);
+ try
+ {
+ int r;
+ while ((r = await HttpContext.BodyStream.ReadAsync(buf.AsMemory(), ct)) > 0)
+ ms.Write(buf, 0, r);
+ }
+ finally { ArrayPool.Shared.Return(buf); }
+ return ms.Length > 0 ? Encoding.UTF8.GetString(ms.ToArray()) : "";
+ }
var body = HttpContext?.Body;
- return ValueTask.FromResult(body is { Length: > 0 } ? Encoding.UTF8.GetString(body.Value.Span) : "");
+ return body is { Length: > 0 } ? Encoding.UTF8.GetString(body.Value.Span) : "";
}
}