问题标签 [deflatestream]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 在 asp.net mvc 中使用 C# 解压缩正文请求,已使用 pako 库 JS 压缩
我有一个 asp.net mvc 应用程序,想使用 Pako 库(使用 gzip 和 deflate 编码)压缩视图中的请求正文,并在使用 OnActionExecuting 和 GZipStream/DeflateStream 到达控制器之前解压缩正文请求。
为什么要这样做?因为我有一个阻止所有请求 > 128KB 的防火墙,所以我在必要时进行压缩,我已经使用 angular 10 和 .NET Core API 中的另一个应用程序执行此操作,但在 asp.net mvc 中不能做同样的事情:(
现在我可以压缩正文并使用 ajax 将其发送到控制器,触发 OnActionExecuting 但我的代码不起作用 request.Filtrer 通过但我在模型控制器中有 null 并且 filterContext.ActionParameters.Values 也是 null 。
我用 angular 10 和 API.NET Core 实现了这一点,它工作我在 angular 中使用了 pako,在我的 api 核心中使用了这段代码:
我的 ASP.NET MVC 代码:
看法 :
动作过滤器属性:
另一个问题我有它是 HttpContext.Request.InputStream (流包含我的身体)它是只读的
谢谢
delphi - C#压缩和Delphi解压
我有一些使用 C# DeflateStream 类压缩的文件,如下所示:
没什么花哨的,所有的默认值。它使用等效的 C# DeflateStreamCode 解压缩很好,即
但我需要使用 Delphi 解压缩它。我已经尝试过 zlib 库(XE8,XE10.3),类似以下内容:
但不断收到“数据错误”消息。如何解压缩 C# DeflateStream 压缩文件?
c# - 有什么方法可以在 .Net Framework 中复制 .Net Core DeflateStream.Flush() 行为?
背景
我想在应用程序的未来 .Net Core 端口中使用StreamJsonRpc作为 WCF 的替代品。在将代码移植到 .Net Core 之前,我想更新现有代码(即 .Net Framework 4.8)以使用 StreamJsonRpc。
因为StreamJsonRpc写入的数据比二进制源数据大,而且压缩性极强,所以想用DeflateStream
它来压缩。
这导致了问题:压缩适用于 .Net Core,但不适用于 .Net Framework。
为什么它不起作用
考虑以下代码:
对于 .Net Core,这会输出一个大于零的数字。对于 .Net Framework,此输出为零。
我已经进行了检测StreamJsonRpc
,我可以看到它Stream.Flush()
在写入数据块后正在调用,所以我很确定这是问题所在。
.Net Core 实现DeflateStream.Flush()
实际上会刷新,但 .Net Framework 实现什么也不做。
我的问题
.Net Framework 4.8 中有什么方法可以刷新DeflateStream
吗?如果有,我可以DeflateStream
为该实现编写一个包装类,Stream.Flush()
以便它实际刷新。
其他注意事项
2015 年 10 月为此提出了一个错误,并于 2015年 12 月为 .Net Core 修复了该错误。
此外,文档DeflateStream.Flush()
不正确。
对于 .Net Framework和.Net Core,标头说:
此方法的当前实现没有功能。
但在备注下它说:
如果压缩模式设置为 Compress,则刷新内部缓冲区。
显然,这两件事都不正确,.Net Core 与 .Net Framework 的文档应该不同。
c# - 如何从 DeflateStream 中获取压缩数据的长度?
以下是我编写的一个简单的压缩方法DeflateStream
:
这个方法的特别之处在于我没有使用MemoryStream
. 这是因为它是一个高吞吐量的服务器。数组outputData
是从 租来的ArrayPool
,用来保存压缩后的字节,这样我用完后可以把它还给ArrayPool
.
压缩发生正确,压缩数据正确放入outputData
,但memStream.Position
为零,所以我无法找出已写入MemoryStream
.
只有一部分outputData
被压缩数据占用。如何找出压缩数据的长度?