2010-03-13 4 views
1

이전에는 HTTP 처리기를 사용 해본 적이 없지만 하나만 사용할 수는 있지만 실제로 제대로 사용하고 있는지 확실하지 않습니다. CSV 파일로 저장 될 문자열을 생성했습니다. 사용자가 버튼을 클릭하면 사용자가 파일을 저장할 수 있도록 download dialog 상자가 열리길 원합니다. 내가 가지고있는 것은 작동하지만, 나는 web.config 파일을 수정하는 것에 대해 계속 읽고있다.잘못된 방법으로 핸들러를 사용하고 있습니까?

내 처리기 :

private string _data; 
private string _title = "temp"; 


public void AddData(string data) 
{ 
    _data = data; 
} 



public bool IsReusable 
{ 
    get { return false; } 
} 

public void ProcessRequest(HttpContext context) 
{ 

    context.Response.ContentType = "text/csv"; 
    context.Response.AddHeader("content-disposition","filename=" + _title + ".csv"); 
    context.Response.Write(_data); 
    context.Response.Flush(); 
    context.Response.Close(); 

} 

그리고 이것은 사용자가 다운로드 할 수있는 페이지입니다 :

string dataToConvert = "MYCSVDATA...."; 

csvHandler handler = new csvHandler(); 
handler.AddData(dataToConvert); 

handler.ProcessRequest(this.Context); 

이 잘 작동하지만 예 I도 없어 (버튼 클릭)에 이제까지 처리기를 인스턴스화하고 항상 web.config를 수정하는 것처럼 보입니다. 내가 뭔가 잘못하고 있는거야?

감사

답변

4

정말 모든 핸들러 있다는 사실을 사용하지 않는거야 나에게 보인다. 기존 페이지 클래스에 코드를 넣는 대신 실제 사용하지 않는 인터페이스를 구현하기 위해 별도의 클래스를 만드는 것이 이점은 무엇입니까? 당신은 응답에 대해서만 일을하고 있습니다. 그래서 페이지 내에서 그렇게하지 않는 이유는 무엇입니까?

web.config를 수정하는 일반적인 방법은 핸들러에서 실제로 요청을 처리하기를 원한다는 것입니다. 사용자의 경우 페이지가 요청을 받고 객체를 묻는 중 이 발생하면에서 핸들러 인터페이스를 구현해야합니다. 데이터를 응답에 덤프하십시오.

특히이 핸들러는 정상적인 응답을위한 독립형 처리기로 사용할 수 있습니까? AddData을 호출했을 때 유용 할 것 같은 느낌이 들었습니다. 으로 등록하면 web.config에 등록하고 비어있는 CSV 파일 (또는 경우에 따라 예외)로 응답합니다. ? 그렇다면 처음에 IHttpHandler을 구현해야한다고 생각하지 않습니다. 나중에 보게 될 다른 개발자를 오도하게 만듭니다.

+0

답장을 보내 주셔서 감사합니다. 원래 코드 페이지에서 사용했지만 사용자가 다운로드 할 수 있도록 처리기를 사용하는 것이 더 효율적이라고하는 포럼 게시물을 읽었습니다. 그들의 시나리오가 달라졌을 것입니다 (즉, 응답 속성을 사용하는 것 이상을 수행하는 것). – XSL

관련 문제