簡體   English   中英

ASP.NET Response.End問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM