HttpHandler下载txt文件(ASP.NET)?

时间:2010-09-22 07:44:42

标签: asp.net download httphandler

嘿,我创建了一个HttpHandler,用于从服务器下载文件。它似乎没有处理任何东西......我在ProcessRequest中放了一个断点,它永远不会去那里。

public class DownloadHandler : IHttpHandler
{
   public void ProcessRequest(HttpContext context)
   {
        //download stuff and break point
   }
}

如上所述,它永远不会停在那里。我也在web.config中注册了它。

<add verb="*" path="????" type="DownloadHandler" />

我不确定该条目的路径部分。我有什么要进去的?我正在下载txt文件,但URL不包含文件名,我不知何故必须将它传递给处理程序。我该怎么做?会议可能会?

由于

2 个答案:

答案 0 :(得分:2)

您是否阅读过How to register Http Handlers?您使用的是IIS 6还是7?

路径部分应包含(部分)网址,因此如果您使用的是没有文件名的静态网址,则应将其放在那里。您可以使用不存在的资源名称结束URL并将其映射到路径

e.g。网址为http://myserver.com/pages/downloadfiles
和path =“downloadfiles”

如果您执行POST,则可以将文件名放在隐藏字段中,然后在处理程序中将其解压缩。如果你正在使用GET,我不确定,要么交叉发布视图状态,要么像你说的那样将文件名放在会话中。

您无法将文件名放在网址中的任何原因?

答案 1 :(得分:0)

处理程序的路径需要是你想要处理的路径 - 我知道的重言式,但它就是那么简单。无论您的网站上有什么路径(真实的或更可能是虚拟的),您都希望由此处理程序处理。

现在除非该路径末尾的文件类型通常由ASP.NET处理(例如.aspx,.asmx但 .txt)ASP将永远不会按顺序看到请求让它通过它的管道,最终在你的处理程序。在这种情况下,您必须将IIS中的扩展类型绑定到ASP.NET。

至于识别处理程序应该响应的文件,您可以通过多种方式实现这一点 - 我强烈建议避免使用会话或cookie或任何时间和隐含的内容。我建议使用查询字符串或表单值,基本上任何将显示为请求标题的内容。

Fianlly,我必须要求为什么你正在使用一个处理程序 - .txt通常会正常运行所以你想在这里实现什么附加功能?可能有更好的方法。