Browse Source

Add property to enable or disable the compression content of http response.

Justin 1 year ago
parent
commit
da357463ba
2 changed files with 28 additions and 18 deletions
  1. 1 1
      JsonRpcLite/JsonRpcLite.csproj
  2. 27 17
      JsonRpcLite/Network/JsonRpcHttpServerEngineBase.cs

+ 1 - 1
JsonRpcLite/JsonRpcLite.csproj

@@ -11,7 +11,7 @@
     <Description>A simple JsonRpc server implementation written in C#.</Description>
     <AssemblyVersion>1.1.0.6</AssemblyVersion>
     <FileVersion>1.1.0.6</FileVersion>
-    <Version>1.1.0.6</Version>
+    <Version>1.1.0.7</Version>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

+ 27 - 17
JsonRpcLite/Network/JsonRpcHttpServerEngineBase.cs

@@ -26,6 +26,13 @@ namespace JsonRpcLite.Network
         /// </summary>
         public string Name { get; protected set; }
 
+
+        /// <summary>
+        /// Gets or set the compress function of the engine.
+        /// </summary>
+        public bool EnbaleCompression { get; set; }
+
+
         /// <summary>
         /// Start the engine and use given router to handle request.
         /// </summary>
@@ -227,24 +234,27 @@ namespace JsonRpcLite.Network
         private async Task<byte[]> GetOutputDataAsync(IJsonRpcHttpContext context, byte[] data, CancellationToken cancellationToken = default)
         {
             var outputData = data;
-            var acceptEncoding = context.GetRequestHeader("Accept-Encoding");
-            if (acceptEncoding != null && acceptEncoding.Contains("gzip"))
+            if (EnbaleCompression)
             {
-                context.SetResponseHeader("Content-Encoding", "gzip");
-                await using var memoryStream = new MemoryStream();
-                await using var outputStream = new GZipStream(memoryStream, CompressionMode.Compress);
-                await outputStream.WriteAsync(outputData, cancellationToken).ConfigureAwait(false);
-                await outputStream.FlushAsync(cancellationToken).ConfigureAwait(false);
-                outputData = memoryStream.ToArray();
-            }
-            else if (acceptEncoding != null && acceptEncoding.Contains("deflate"))
-            {
-                context.SetResponseHeader("Content-Encoding", "deflate");
-                await using var memoryStream = new MemoryStream();
-                await using var outputStream = new DeflateStream(memoryStream, CompressionMode.Compress);
-                await outputStream.WriteAsync(outputData, cancellationToken).ConfigureAwait(false);
-                await outputStream.FlushAsync(cancellationToken).ConfigureAwait(false);
-                outputData = memoryStream.ToArray();
+                var acceptEncoding = context.GetRequestHeader("Accept-Encoding");
+                if (acceptEncoding != null && acceptEncoding.Contains("gzip"))
+                {
+                    context.SetResponseHeader("Content-Encoding", "gzip");
+                    await using var memoryStream = new MemoryStream();
+                    await using var outputStream = new GZipStream(memoryStream, CompressionMode.Compress);
+                    await outputStream.WriteAsync(outputData, cancellationToken).ConfigureAwait(false);
+                    await outputStream.FlushAsync(cancellationToken).ConfigureAwait(false);
+                    outputData = memoryStream.ToArray();
+                }
+                else if (acceptEncoding != null && acceptEncoding.Contains("deflate"))
+                {
+                    context.SetResponseHeader("Content-Encoding", "deflate");
+                    await using var memoryStream = new MemoryStream();
+                    await using var outputStream = new DeflateStream(memoryStream, CompressionMode.Compress);
+                    await outputStream.WriteAsync(outputData, cancellationToken).ConfigureAwait(false);
+                    await outputStream.FlushAsync(cancellationToken).ConfigureAwait(false);
+                    outputData = memoryStream.ToArray();
+                }
             }
             return outputData;
         }