如何解决在已经用pako库JS压缩过的asp.net mvc中用C#解压缩主体请求
我有一个asp.net mvc应用程序,想要使用Pako库在视图中压缩请求的主体(使用gzip和deflate编码),并在使用OnActionExecuting和GZipStream / DeflateStream到达控制器之前解压缩主体请求。 / p>
为什么要这样做?因为我的防火墙阻止了所有大于128KB的请求,所以我在必要时进行压缩,我已经使用angular 10和.NET Core API中的另一个应用程序进行了此操作,但是在asp.net mvc中无法做同样的事情:(>
现在我可以压缩主体并使用ajax将其发送到控制器,触发了OnActionExecuting,但是我的代码无法正常工作。通过过滤器,但是我在模型控制器中具有null并且filterContext.ActionParameters.Values也为null
我用angular 10和API.NET Core做到了这一点,并且在我的api核心中使用了pako并使用了这段代码:
public async Task Invoke(HttpContext httpContext)
{
await SlowStuffSemaphore.WaitAsync();
try
{
_httpContext = httpContext;
bool isGzip = IsGzipRequest();
if (isGzip)
{
_httpContext.Request.Body = new GZipStream(_httpContext.Request.Body,CompressionMode.Decompress);
}
await _next.Invoke(_httpContext);
}
catch(ArgumentNullException e)
{
Console.WriteLine("Error: " + e.Message);
}
finally
{
SlowStuffSemaphore.Release();
}
}
我的ASP.NET MVC代码:
查看:
<script>
window.SendZipedRequest = (reqbody) => {
$.ajax({
url: "/Home/AddAgency",contentType: "application/x-www-form-urlencoded; charset=utf-8",type: "post",headers: { "content-encoding": "gzip" },data: pako.gzip(JSON.stringify(reqbody),{to: "string"}),beforeSend: function (data) {
//Do Something
},success: function (data,textStatus,jqXHR) {
console.log('Yay!');
//$("#content").html(data);
},error: function (jqXHR,errorThrown) {
console.log('Oh no!');
},complete: function (jqXHR,textStatus) {
console.log(textStatus);
console.log(jqXHR.status);
//console.log(jqXHR.responseText);
}
});
}
</script>
ActionFilterattribute:
public class CompressContentAttribute : ActionFilterattribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpRequestBase request = filterContext.HttpContext.Request;
request.Filter = new GZipStream(request.Filter,CompressionMode.Decompress);
base.OnActionExecuting(filterContext);
}
}
另一个问题是HttpContext.Request.InputStream(流包含我的身体),它是只读的
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。