一直使用正常的站点,今天开始所有下载文件的文件末尾都被追加了一段HTML代码
具体实现代码如下:
下载文件的服务器端代码
FileStream dFileSM = new FileStream(HttpUtility.UrlDecode(fileName, System.Text.Encoding.UTF8), FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader dFileBR = new BinaryReader(dFileSM); Response.Charset = "utf-8"; Response.AddHeader("connection", "keep-alive"); Response.ContentType = "application/octet-stream"; Response.AddHeader("content-disposition", "attachment;filename=20180308144837140.txt" ); Response.AddHeader("content-length", dFileSM.Length.ToString()); if (dFileSM.Length != 0) {
Response.BinaryWrite(dFileBR.ReadBytes((int)dFileSM.Length)); } dFileBR.Close(); dFileSM.Close(); HttpContext.Current.ApplicationInstance.CompleteRequest();
下面是下载后的文件,标红的是多出来的内容
正常文件内容:
-------------------------- 以下是下载到客户端后多出来的内容 (不含此行)----------------
<!DOCTYPE html >
<html xmlns="http://www.w3.org/1999/xhtml" >
<head><title>
</title></head>
<body>
<form method="post" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="CyzEz0PopgI6leLEh/XgQbULllbFOMyRQsxc6nJZLlYFf6ZV2WtrYKziC8LOUoWGG2CWAJB2UPXEM/k8rUg60gJI4+0Sm3UXR6EXmTbL0pk=" />
</div>
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="E0C68A58" />
</div>
<div>
</div>
</form>
</body>
</html>
将 HttpContext.Current.ApplicationInstance.CompleteRequest();
替换为 Response.End();
可以解决问题,但不知原因是什么
OS没有更新过,Framework没有更新过,程序代码没改过,突然输出的结果就变了
好好看看Render函数,联系上下文,就明白了。
HttpContext.Current.ApplicationInstance.CompleteRequest();方法前加上Response.Flush();即可解决此问题
但疑问是什么原因导致此现象的发生,原先同样的代码同样的环境不会出现这种情况