asp.net 页面显示随机符号而不是Firefox上的错误消息

5m1hhzi4  于 2023-05-23  发布在  .NET
关注(0)|答案(6)|浏览(92)

随机地,在一些项目中,一些页面显示随机符号而不是错误消息。就像这个:
�������� I�%&/m�{J�J��t�� $@�����iG#)���eVe]f@�흼 ��{���{��;�N'���?\fdl��J�ɞ!���?~|?"��Ey�')=��y6����h�����Ųi��- �ez����7i޴i�L���,�4�̧i���Ίe��Ͼ|uz����:�}���U{���������΋��~�ȗu.-�����l>F'�����Y�l��$k�tF������{�� ��[����'U���|6J�lR��b6��юG�k�^,ӏ��߿�}<~<�;c�R鱕iV��m�|��� �yDl���tRͮ�|N��>�Ey�裟�k*��!z���Ѳ�Y)5��G��A�8$D��Ѥ̦oI��]�P �"�/��v[����W�~���m`N�rvk���Mqz3���wV�
它发生得很随机,似乎是由不同的因素引起的。在这里,它是在一个文件上传。
我们在此页面上使用SharpZipLib,但代码路径不应使用它。
有谁知道为什么会发生这种情况,以及如何预防?

**编辑:**只在Firefox上发生。IE(8)正确显示错误消息。
**编辑2:**它似乎是随机发生的,只在某些页面/网站上。在另一个IIS站点上的相同页面工作正常。它似乎只在IIS 7上做到这一点;我在IIS 6上没有这些报告,在我的开发机器上也没有遇到过。
**编辑3:**看起来只有在页面崩溃时才会发生。
**编辑4:**好的,所以,它只发生在IIS 7上,并且只有当我得到错误500时。我想可能是IIS错误页面有问题。我该如何尝试改变它们?

Firebug给了我这些标题:

  • 回复 *

缓存控制私有
Content-Type text/html;字符集=utf-8
服务器Microsoft-IIS/7.0
X-AspNet-版本2.0.50727
基于ASP.NET的X技术
日期2011年4月4日星期一10:31:24 GMT
内容长度2284

  • 请求 *

主机xxxx
用户代理Mozilla/5.0(Windows; Windows NT 6.1; fr; rv:1.9.2.16)Gecko/20110319 Firefox/3.6.16(.NET CLR 3.5.30729;.NET4.0E)
接受text/html、application/xhtml+xml、application/xml; q=0.9,/;q=0.8
Accept-Language fr,fr-fr; q= 0.8,en-us; q= 0.5,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8; q=0.7,*;q=0.7
保持活力115
连接保持活动
推荐人xxxxx
饼干xxxxxx
我有没有办法说“在这个页面上,我根本不接受gzip压缩”?

wj8zmpe1

wj8zmpe11#

我没有找到任何真实的的解决方案,但我找到了一个令人满意的解决方案。
请记住,问题只会在以下情况下出现:

  • 该网站配置在IIS 7/ Windows Server 2008上。
  • 显示垃圾符号的页面实际上已经崩溃了。实际上,产生的“垃圾”是一个未解压缩的gzip压缩错误消息,或者类似的东西。
  • 对动态或静态内容禁用gzip压缩不会改变任何东西

解决方法很简单:在浏览器中拒绝gzip压缩的内容。在Firefox中,如http://forgetmenotes.blogspot.com/2009/05/how-to-disable-gzip-compression-in.html所示:
1.在URL栏中键入about:config(接受免责声明)
1.在URL栏下面的筛选器字段中键入编码
1.双击“network.http.accept-encoding”行
1.清空值
在我的网站上,它对CSS做了一些奇怪的事情(在那之后StackOverflow根本没有任何CSS),但至少它正确地向我显示了错误消息,这使我能够修复错误。
希望它能帮助某人。

x7yiwoj4

x7yiwoj42#

对于任何遇到这种情况的人来说,另一种解决方法可能是删除应用程序错误的响应过滤器,这将消除编码并通过未压缩发送。由于这只针对错误消息,因此对性能的影响应该是最小的。
在您的Global.asax中
VB

Sub Application_Error()
    Response.Filter = Nothing
End Sub

C#(我假设这是正确的,请参阅下面的博客链接)

protected void Application_Error(object sender, EventArgs e)
{
    Response.Filter = null;
}

所有功劳都归功于Rick Strahl和this blog post的解决方案。
注意:我也添加了这个答案,我自己的问题在这里- IISExpress乱码HTTP 500错误消息

n7taea2i

n7taea2i3#

这看起来像是gZip错误解码。

检查您是否在页面上设置了Content-Length,然后使用gZip过滤器。如果是,则从代码中删除Content-Length设置。
当您发送Content-Length,然后压缩它时,iis无法将头Content-Length更改为新的压缩后的头,并且发送错误的大小时,可能会发生这种情况,然后浏览器阅读错误的大小并无法正确解压缩。
参考:
在负载平衡的服务器上,ASP.NET站点在加载时有时会冻结和/或在页面顶部显示奇怪的文本

更新

另一个可能的原因是设置了错误的Response.ContentType,例如设置为文本发送gif图片,或者设置为图片发送文本。

更新2

可能是内容类型的错误。设置此标题:

context.Response.ContentType = "application/octet-stream";
context.Response.AppendHeader("Content-disposition", "attachment; filename=" + cFileNameToShowAndDownload);
kcugc4gi

kcugc4gi4#

我遇到了一个类似的问题与dotnet核心。(这个问题现在已经接近9岁了。不要认为这将有助于操作,但也许其他人会发现这是有帮助的)。
我得到了类似的乱码文本,它看起来像gzip编码。在firefox中禁用压缩就像选择的答案一样似乎验证了这一点。这个问题只出现在尝试使用非标准内容的脚本块(剑道模板)渲染局部视图时。这与异常发生与否无关。
问题归结为配置。我们使用的第三方库破坏了响应。使用微软在https://learn.microsoft.com/en-us/aspnet/core/performance/response-compression?view=aspnetcore-2.2上概述的压缩解决了这个问题(我们停止使用第三方库)。正如https://stackoverflow.com/a/54372810/1462295中提到的,在配置压缩和静态文件设置时,顺序很重要。

public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression(options =>
    {
        options.Providers.Add<BrotliCompressionProvider>();
        options.Providers.Add<GzipCompressionProvider>();
    });
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // ordering matters here
    app.UseResponseCompression();
    app.UseStaticFiles();
}
mklgxw1f

mklgxw1f5#

您也可以在Chrome(或Brave)中使用ModHeader扩展程序“修复”此问题。然后添加一个名为Accept-encoding且值为nothing的Request header,然后重新加载页面:

fv2wmkja

fv2wmkja6#

答案有点晚,但我认为它可以帮助某人。
在我的例子中,问题是我在SQL Server数据库中使用会话状态。因为我已经将ASPState数据库移到了另一台服务器上,所以web.config文件中的凭据不是最新的。更正此问题,解决了此问题。

相关问题