日期:2014-05-20  浏览次数:20372 次

====100分,用HttpHandler还是用HttpModule?====
对HttpHandler和HttpModule不是很熟悉,现在我想实现如下功能:

当用户请求形式如:/Info/Detail/*/*/*/*.aspx的时候,比如
/Info/Detail/2006/06/30/1584587.aspx,我首先判断该文件是否存在,如果不存在则创建,否则就直接访问该页面。功能类似与文件系统缓存。

我现在用了HttpHandler来处理,发觉文件已经创建了,但是访问该页面的窗口内容是空白的,如果把创建好的文件移动到其他目录,比如/Info/下就可以访问。后来我在MyHandler的ProcessRequest创建之后添加:
context.Response.Redirect(context.Request.Path);
也不行,会导致死循环加载~~

究竟应该怎么处理,还是应该使用HttpModule?

恳请各位给出思路,不够可以加分啊,路过的也请帮顶啊,顶者有分啊,谢谢谢谢!!!

------解决方案--------------------
用HttpHandler,或HttpHandlerFactory。
------解决方案--------------------
处理特定类型文件是用 HttpHandler 没错。
不过如果文件 /Info/Detail/2006/06/30/1584587.aspx 不存在的话,IIS直接返回404错误给客户端,不会把请求传递给aspnet_isapi.dll处理,也就不会传递给你自己写的HttpHandler的。
我看你的描述有点奇怪。
------解决方案--------------------
同意Eri(阳光下的阴影) 但 *.aspx如果不存在还是可以到HttpHandler的. 如果是其他就不行.因为*.aspx还是通过asp.net来解释的. 其他的就不行了.iis.直接报不存在了.
------解决方案--------------------
用IO去判断。然后用server.transfer()去转向.
------解决方案--------------------
cpp2017(慕白兄) ( ) 信誉:100 Blog 2007-1-5 0:36:03 得分: 0

但 *.aspx如果不存在还是可以到HttpHandler的.
如果是其他就不行.因为*.aspx还是通过asp.net来解释的.

其他的就不行了.iis.直接报不存在了.

-------------------------------------------

确实如此, 被一片文章误导了。
这个还是比较奇怪。



------解决方案--------------------
你查看一下你生成的文件正确已否。
然后在Trace.axd里看看执行情况。