2009-05-06 2 views
1

일부 트랜잭션 (법률 추적 목적으로)을 위해 브라우저로 전송 된 완전하고 정확한 HTML을 저장해야합니다.이 작업에 적합한 고리가 있는지 확실하지 않습니다. 아는 사람 있나요? (BTW, 스타일 시트 및 이미지와 같은 관련 페이지를 저장할 필요가 있음을 알고 있습니다.)ASP.NET 브라우저에 보낸 HTML 저장

답변

1

응답 필터를 구현할 수 있습니다. 다음은 ASP.NET에서 생성 된 HTML을 처리하는 a nice sample입니다. HTML이 클라이언트에 전송되는 것 외에도 HTML을 데이터베이스 또는 기타 적절한 저장소에 쓸 수 있어야합니다. Application_BeginRequest 처리기에서 다음 코드를 삽입, Global.asax에있는

:

void Application_BeginRequest(object sender, EventArgs e) 
{ 
    Response.Filter = new HtmlSavingFilter(Response.Filter); 
} 
2

당신은을 만들 수 있습니다 여기에

대체 및 응용 프로그램에 필터를 훅하기 위해 IMO 훨씬 쉬운 방법입니다 http module 그리고 출력 스트림을 어딘가에 저장하십시오.

당신은 ... PreSendRequestContent 이벤트에 후크해야합니다

이 이벤트는 ASP.NET 클라이언트에 응답 내용을 전송하기 직전에 발생합니다. 이 이벤트를 사용하면 클라이언트에게 전달되기 전에 내용을 변경할 수 있습니다. 이 이벤트를 사용하여 모든 페이지에서 공통적 인 내용을 페이지 출력에 추가 할 수 있습니다. 예를 들어, 공통 메뉴, 머리말 또는 꼬리말.

0

또한이 목적을 위해 특별히 만들어진 하드웨어 장치가있다. 우리는 "PageVault"이라는 것을 사용했습니다.

1

특정 페이지의 렌더링 된 HTML 만 저장한다고 가정합니다. 그렇다면 디스크의 어딘가에 캐싱 목적으로 렌더링 된 html을 저장하는 내 응용 프로그램 중 하나에서 다음 접근 방식을 사용하고 있습니다. 이 메서드는 단순히 페이지의 render 이벤트를 재정의합니다.

protected override void Render(HtmlTextWriter writer) 
{ 
    using (HtmlTextWriter htmlwriter = new HtmlTextWriter(new System.IO.StringWriter())) 
    { 
     base.Render(htmlwriter); 
     string html = htmlwriter.InnerWriter.ToString(); 


     using (FileStream outputStream = new FileStream(@"C:\\temp.html", FileMode.OpenOrCreate)) 
     { 
      outputStream.Write(html, 0, html.Length); 
      outputStream.Close(); 
     } 

     writer.Write(html); 
    } 
} 

정말 잘 작동합니다.

관련 문제