这是一个艰难的。我有一个响应过滤器设置来转换html,然后再吐出到浏览器(http://aspnetresources.com/articles/HttpFilters)。这适用于每个机器,但我的机器。实际上它正在我的机器上工作,直到我不得不进行硬重置,因为它被锁定了。
public override void Write(byte[] buffer, int offset, int count)
{
string strBuffer = System.Text.UTF8Encoding.UTF8.GetString(buffer, offset, count);
对于其他人(以及我的先天),strBuffer包含HTML。无论出于何种原因,它都会为我返回垃圾字符。有任何想法吗?我把头发拉出来了!!
更新
原来“启用动态内容压缩”导致了这个问题。出于某种原因,它在被传递到过滤器之前被gzip压缩。
解决方案
在web.config中将“dynamicCompressionBeforeCache”设置为false修复了该问题。
<urlCompression doStaticCompression="true" doDynamicCompression="true" dynamicCompressionBeforeCache="false" />
答案 0 :(得分:0)
听起来像是出了问题。锁定后我也有一些奇怪的行为。 对我有用的是删除C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files
中的临时文件答案 1 :(得分:0)
你已经指定了这些字节:31,139,8,0,0,0,0,0,4
这不是有效的UTF-8。特别是,它意味着Unicode字符U + 0031(“INFORMATION SEPARATOR ONE”)后跟字节139和8 ...而139后跟8不是有效的UTF-8字节序列。即使那些 形成一个有效的序列,你也会有5个Unicode U + 0000个字符(NUL),然后是U + 0004(END OF TRANSMISSION)。几乎没有有效的HTML。
我不知道你实际过滤了什么,但它不是有效的UTF-8文本。事实上,它看起来根本不是文本。您是否有可能尝试将过滤器应用于图像等二进制数据?
请注意,您的过滤方法存在另一个基本问题:您假设每个缓冲区都包含完整的文本。你很可能会收到一个缓冲区,其中包含一个字符的前半部分,然后是一个包含其余部分的第二个缓冲区。这就是System.Text.Decoder
接口的用途 - 它是有状态的,记住部分字符。