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);

这很好用,但是我没有见过实例化处理程序并且似乎总是修改 web.config 的示例。难道我做错了什么?

谢谢

4

1 回答 1

4

在我看来,它根本没有真正使用它是一个处理程序的事实。为实现您不真正使用的接口创建一个单独的类而不是将代码放在现有页面类中有什么好处?你只是对响应做一些事情——那么为什么不在页面内做呢?

修改 web.config 的典型方法是因为您希望处理程序实际处理请求 - 而在您的情况下,页面正在接收请求,并且只是询问恰好实现处理程序接口的对象将数据转储到响应中.

特别是,这个处理程序是否可以用作正常响应的独立处理程序?感觉它只会在你调用AddData它时做任何有用的事情......如果你确实在 web.config 中注册它,它只会响应一个空的 csv 文件(或者可能是一个异常),对吧?如果是这样的话,我真的不认为它应该IHttpHandler首先实现 - 它会误导其他稍后查看它的开发人员。

于 2010-03-13T21:06:26.077 回答