我负责的项目中有这样一段代码:
1 try { 2 Response.AppendHeader(...) // 向Response写入一段内容 3 Response.AppendHeader(...) 4 WriteContent(Response.OuputStream); 5 } catch { 6 Response.Clear(); // 清除原先写入的内容,但是并没有达到预期的目的 7 Response.AppendHeader(...) // 写入新的内容 8 Response.Write(...) 9 }
运行时发现:当 WriteContent方法抛出异常时,代码正确的转入 catch 段,但是原先写入的HTTP头部并没有被清除!而是和新的HTTP头部混在了一起。这样造成实际输出结果混乱。
起初以为是Buffer没有起作用的原因,后来在MSDN上看到这样的描述(http://msdn.microsoft.com/en-us/library/system.web.httpresponse.clearcontent(v=vs.100).aspx):
The Clear method does not clear header information.
原来这个方法只清除了Content部分,所以只要在原先代码的第6行前面加上
1 Response.ClearHeaders();
就可以了。