2012-01-19 82 views
15

tôi có mã như thế này:Sự khác nhau giữa Response.End() và Response.Flush()

context.HttpContext.Response.Clear(); 
      context.HttpContext.Response.Write(htmlString);    
      context.HttpContext.Response.End(); 

Nhưng khi các trang được nạp Tôi có thẻ html không khép kín trên chúng. Khi tôi thay thế Response.End() với Response.Flush() nó hoạt động tốt. Sự khác nhau giữa Response.End() và Response.Flush() là gì?

Trả lời

17

Response.Flush

Lực lượng tất cả các hiện đệm đầu ra phải được gửi cho khách hàng. Phương thức xả có thể được gọi nhiều lần trong quá trình xử lý yêu cầu.

Response.End

Gửi tất cả các đầu ra hiện đệm cho khách hàng, dừng thực hiện các trang, và làm tăng sự kiện EndRequest.

Bạn nên thử sử dụng mã này nếu bạn không thực hiện bất kỳ quá trình xử lý nào trên trang sau khi phản hồi.Write và muốn ngừng xử lý trang.

context.HttpContext.Response.Clear(); 
    context.HttpContext.Response.Write(htmlString);    
    context.HttpContext.Response.Flush(); // send all buffered output to client 
    context.HttpContext.Response.End(); // response.end would work fine now. 
+0

Tôi tò mò nếu nó thực sự cần thiết để gọi 'Flush() 'trước' End() 'ở đây? Từ các định nghĩa mà bạn cung cấp, 'End' thực hiện tương tự như' Flush' trước khi dừng việc thực thi trang và tăng 'EndRequest' ... vậy tại sao nó lại thận trọng để gọi' Flush() 'trước' End() '? –

+4

nevermind, tôi có một thiết lập phức tạp trong mã của tôi có liên quan đến các mã trên và khi tôi loại bỏ các 'Flush()' Tôi nhận được trường hợp ngoại lệ nói rằng thread đang bị hủy bỏ. –

+1

Từ tài liệu như thể hiện nó sẽ xuất hiện như thể bạn không cần phải gọi Flush trước khi kết thúc, nhưng trong thực tế tất cả các loại lỗi xảy ra khi gọi End mà không có Flush. – Roland

0

Phương pháp để download các file tài liệu MVC

Response.ContentType = "application/octet-stream"; 
      Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName);     
      Response.TransmitFile(Server.MapPath(ConfigurationManager.AppSettings["JICDocumentUploads"] + ProspectCode + "\\" + FileName)); 
      Response.End(); 
  • JICDocumentUploads: nó là tập tin lưu đường dẫn đến từ web.config
  • ProspectCode: nó là mã duy nhất cho tài liệu tải
  • file Tên: tệp đã chọn để tải xuống
+0

Điều này có liên quan gì đến câu hỏi ban đầu về sự khác biệt giữa 'Response.End()' và 'Response.Flush()'? – dr0i

+0

điều này không trả lời được câu hỏi, điều này hoàn toàn tắt chủ đề – WhatsThePoint

Các vấn đề liên quan