2010-06-21 5 views
2

나는 브라우저에 파일을 스트리밍하는 C#/ASP.NET의 도우미 메서드를 작성 중이며 응답 헤더/콘텐츠를 지우기 전에 브라우저에 내용이 기록되었는지 감지 할 수 있기를 바랍니다. 파일 바이트를 보내는 중. 내 도우미 메소드를 호출하는 페이지가 올바르게 설정되지 않은 경우 "정상적인"페이지 헤더 및 컨텐츠가 브라우저로 전송되기 전에 가능할 수있는 것처럼 보입니다. 전체 응답 및 파일 데이터로 새로 시작하십시오. 그래서 이미 데이터가 전송되었는지 알 수있는 방법이 있습니까?응답 데이터가 아직 ASP.NET에 클라이언트로 전송되었는지 어떻게 알 수 있습니까?

기본적으로,이 예제의 가짜 속성 BytesSent 같은 것을 찾고 있어요 :

if (response.BytesSent == 0) 
{ 
    response.ClearHeaders(); 
    response.ClearContent(); 
    response.Clear(); 

    response.ContentType = "application/octet-stream"; 
    response.AppendHeader("Content-Disposition", "attachment; filename=" + filename); 
    response.AppendHeader("Content-Length", new FileInfo(path).Length.ToString()); 

    // 
    // etc. (stream the file) 
    // 
} 
else 
{ 
    // throw an exception (or handle the problem in some other way) 
} 

답변

0

나는 당신이 찾는 속성이 존재하지만, 일반적 여부를 알 수없는, 이것은 당신이 갈 것 어떻게하지 이것에 관해서. 기본적으로이 호출은 "페이지"에서 만들고자하는 호출이 아닙니다. 즉, System.Web.UI.Page (일반적으로 .aspx 파일) 인스턴스를 의미합니다. 대신, 이런 종류의 작업을 위해 핸들러 (.ashx)를 사용하십시오. 처리기는 System.Web.IHttpHandler의 구현이며 ProcessRequest() 메서드 내에서이 메서드를 호출하거나 논리를 ProcessRequest() 내에 넣어야합니다.