嘿,我创建了一个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不包含文件名,我不知何故必须将它传递给处理程序。我该怎么做?会议可能会?
由于
答案 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通常会正常运行所以你想在这里实现什么附加功能?可能有更好的方法。