[英]ASP.NET Response.End Problem
我有一個頁面,用戶從那里下載文件。當用戶單擊下載鏈接並完成下載文件時,我正在為“文件下載計數器”事件插入新記錄。 (寫到FileID,日期,blalbla ..)
但是我的腳本有問題...下載開始和結束后,它添加了一個新記錄,但是此后,它再次觸發事件並也創建了一個新記錄。因此有1個下載和2個新的下載記錄。 這是我的劇本;
if (Page.Request.QueryString["FileID"] != null)
{
OleDbCommand command = new OleDbCommand("select * from Dosyalar where DosyaID=" + Page.Request.QueryString["FileID"].ToString(), veri.baglan());
string dosyaAdi = "";
int DosyaID = 0;
OleDbDataReader dr = command.ExecuteReader();
while (dr.Read())
{
dosyaAdi = Server.MapPath("formlar") + "\\" + dr["URL"].ToString();
DosyaID = Convert.ToInt32(dr["FileID"]);
}
dr.Close();
FileInfo dosya = new FileInfo(dosyaAdi);
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + dosya.Name);
Response.AddHeader("Content-Length", dosya.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(dosyaAdi);
// INSERT A NEW RECORD
OleDbCommand ekle = new OleDbCommand("Insert into Indirilenler (FileID,Tarih) values (@p1,@p2)", veri.baglan());
ekle.Parameters.AddWithValue("p1", FileID);
ekle.Parameters.AddWithValue("p2", DateTime.Now.ToShortDateString());
ekle.ExecuteNonQuery();
Response.Flush();
Response.End();
問題在於瀏覽器實際上正在發出兩個請求以獲取文件。 這是典型的行為。
您都可以在此頁面上打開OutputCaching。 這應該意味着瀏覽器的第二個請求不會到達您的服務器,因此僅記錄一個條目,但是您還需要確保在web.config文件中未設置調試標志。
另一個選項是檢測請求類型。 我認為瀏覽器發送的第一個請求通常是HEAD請求,而不是GET或POST。 您可以適當地檢測和處理這些問題,但我認為第一種選擇可能更可靠。
另外,您實際上應該將此代碼編碼為ASPX處理程序而不是頁面。 這意味着您可以避免使用response.Clear()
,從而不會使瀏覽器對URI的內容類型感到困惑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.