我是否以错误的方式使用处理程序?

时间:2010-03-13 21:01:38

标签: c# asp.net ihttphandler ashx handlers

我之前从未使用过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。难道我做错了什么?

由于

1 个答案:

答案 0 :(得分:4)

在我看来,它并没有真正使用它是一个处理程序的事实。为这个实现你并不真正使用的接口创建一个单独的类有什么好处,而不是把代码放在你现有的页面类中?你只是做了回应 - 所以为什么不在页面内做呢?

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

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