2012-05-31 2 views
2

Response.End()ThreadAbortException을 생성합니다.Response.End() 대신 Response.Flush()를 사용할 수 있습니까?

대신에 HttpContext.Current.ApplicationInstance.CompleteRequest을 사용하면 문제가 해결되지 않습니다.

그래서 우리는 버퍼에 있지만 페이지의 처리를 중지하지 않는 것을 브라우저에 전송되는 대신 Response.End()

답변

9

Response.Flush()Response.Flush()을 사용할 수 있습니다, 그래서 다음 단계의 실행을 계속합니다.

Response.End()은 무엇입니까 은 asp.net 페이지 수명주기에서 다음 함수 호출시 실행 단계를 중지하는 것입니다. http://msdn.microsoft.com/en-us/library/ms178472.aspx

그 이유는 호출의 시리즈의 루프 밖으로 던져 예외를 throw해야합니다.

하나의 대안은 Response.Close()이지만 실행 단계를 중지하는 것이 아니며 브라우저와의 연결 종료 후 무언가를 보내려는 경우 다른 오류가 발생할 수 있습니다. Response.Close()을 수행하는 경우 전화하기 바로 전에 Flush()을 수행해야합니다. 그렇지 않으면 브라우저에서 예기치 않은 데이터를 가져옵니다.

당신은 또한 읽을 수 있습니다 Redirect to a page with endResponse to true VS CompleteRequest and security thread

4

사용을 조건을 다운로드하기 전에 파일 Response.IsClientConnected -

if (Response.IsClientConnected) 
{ 
    Response.Clear(); 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.ContentType = "Application/pdf"; 
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + fileName); 
    Response.TransmitFile(Server.MapPath(@"yourpath" + fileName)); 
    Response.Flush(); 
    Response.Close(); 
    } 

이 잘 투쟁의 많은 후 나를 위해 일하고 있습니다. 나는 그것이 당신을 위해 또한 작동하기를 바랍니다.

관련 문제