有很多(許多)SO和其他線程關於Response.End()
的正確使用,但是,沒有一個看起來與我們在代碼中看到的行爲相匹配多年。Response.End()不會阻止附加html
行爲:當下載一個文件,網頁的HTML內容附加到文件內容。
項目類型:的WebForms
.NET版本: 4.6.2 | 4.5.0 | 4.0.0
VS版本: 2015年| 2013 | 2012(有/無安全模式開啓)
虛擬主機提供商: IIS快遞(默認設置)
創建一個空白的WebForms項目。刪除所有參考,但;
- 系統
- 的System.Web
Default.aspx的(從默認模板stipped)
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TestDownload2.Default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Sample page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:Button ID="_uiExportBtn" runat="server" Text="Download" OnClick="_uiExportBtn_Click" />
</form>
</body>
</html>
Default.aspx.cs
namespace TestDownload
{
using System;
using System.IO;
using System.Threading;
public partial class _Default : Page
{
protected void _uiExportBtn_OnClick(object sender, EventArgs e)
{
try
{
string filePath = Server.MapPath("~/File1.txt");
FileInfo fileDetails = new FileInfo(filePath);
Response.Clear();
Response.AddHeader("Content-Disposition",
"attachment; filename=" + Path.GetFileName(filePath)); // strip out the path
Response.AddHeader("Content-Length", fileDetails.Length.ToString());
Response.ContentType = "text/plain";
Response.WriteFile(filePath);
Response.Flush();
Response.End();
}
catch (ThreadAbortException)
{
Thread.ResetAbort();
}
}
}
}
文件1的內容.txt
File with sample data that can be downloaded.
單擊下載時的文件內容;
File with sample data that can be downloaded.
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
Sample page
</title></head>
<body>
<form method="post" action="./Default.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTQ2OTkzNDMyMWRk3Rw04QLdhpy5d4I1K2wRBGQwJyDyRwQJv3qrWVnmZOk=" />
</div>
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="CA0B0334" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAIM+aT11BIx7AHRURAAeZqgtB4HvaHnJdET69NHLAgDcsjxSqzk6G3joivJ/c73mKUQf4CSnfdxrC8NepO7KQg3" />
</div>
<input type="submit" name="_uiExportBtn" value="Download" id="_uiExportBtn" />
</form>
</body>
</html>
編輯 了很多努力縮小這種下降與不同的瀏覽器,VS版本,.NET版本試驗後,看來這個問題是註冊在IIS指定的MIME類型。
而且似乎這是我碰到的this issue第二次。我使用了類似的解決方法,但我仍然因爲這個原因而感到困惑。