gpt4 book ai didi

c# - IIS 和 Chrome:无法加载资源:net::ERR_INCOMPLETE_CHUNKED_ENCODING

转载 作者:IT王子 更新时间:2023-10-29 04:43:22 24 4
gpt4 key购买 nike

我最近遇到了一个 Chrome 问题,我认为它值得与您分享。

我使用 HttpHandler 开发了一个自写的 API,主要应该返回 json 数据。但是当发生错误时,我想显示一个 html 文件。这在 IE 和 FF 中运行良好,但在 Chrome 中则不然。

查看开发者工具发现了这个错误:net::ERR_INCOMPLETE_CHUNKED_ENCODING

谷歌对这个问题说得不多,但看到的次数很多。我只知道,一段时间后它神奇地消失了。

我发现它位于这行代码中:

result.StoreResult(context);
context.Response.Flush();
context.Response.Close(); //<-- this causes the error

删除最后一行后效果很好。我不知道为什么只有 Chrome 有这个问题,但似乎我在 Chrome 完成阅读之前关闭了响应流。

我希望它能帮助那些遇到相同或类似问题的人。

现在我的问题是:关闭/刷新响应流的最佳做法是什么?有什么规定吗?

最佳答案

根据 ASP.NET sets the transfer encoding as chunked on premature flushing the Response :

ASP.NET transfers the data to the client in chunked encoding (Transfer-Encoding: chunked), if you prematurely flush the Response stream for the Http request and the Content-Length header for the Response is not explicitly set by you.

Solution: You need to explicitly set the Content-Length header for the Response to prevent ASP.NET from chunking the response on flushing.

这是我用来防止 ASP.NET 通过设置所需 header 对响应进行分 block 的 C# 代码:

protected void writeJsonData (string s) {
HttpContext context=this.Context;
HttpResponse response=context.Response;
context.Response.ContentType = "text/json";
byte[] b = response.ContentEncoding.GetBytes(s);

<b>response.AddHeader("Content-Length", b.Length.ToString());</b>

response.BinaryWrite(b);
try
{
this.Context.Response.Flush();
this.Context.Response.Close();
}
catch (Exception) { }
}

关于c# - IIS 和 Chrome:无法加载资源:net::ERR_INCOMPLETE_CHUNKED_ENCODING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22219565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com