我要求我的新项目在特定日期之后提供一些“隐藏”资产(实际上只是隐藏在App_Data目录中)。在此之前,他们应该表现得像他们不在那里。
我用Page对象做了一百次这样的事情,但是当我开始研究这个时,我以为我会看看处理程序。从未与他们合作过(并且受到他们的一点恐吓),我很高兴地发现他们在没有整个Page类的开销的情况下提供我的XML和JPG文件。我已经考虑过了,我很高兴。我写它来处理像“MyHandler.ashx?secretfile = blah.xml”这样的功能,它运行得很好。
然后我开始查看特殊扩展处理,以便处理程序拾取“blah.xml.secret”请求并在检查日期后返回blah.xml。我脑子里熄了几盏灯,然后我重新编写代码,以便处理这个案子。它工作(在IDE中)!我很兴奋。
将它放到开发服务器(IIS)上有点不同:我必须将.secret注册为.NET类型(没什么大不了的),在我取消选中“验证文件存在”之前它仍然无效复选框。 (blah.xml.secret显然不存在:blah.xml确实存在,但不是在它被要求的地方,只在安全的App_Data目录中。)这不是一个大问题,但现在我的聪明的解决方案依赖于两个实现IIS方面的详细信息。
所以我的问题是:这是asp.net中处理程序的预期用途吗?我歪曲这个无法承认吗?我觉得过去我曾经看过网站做这样的技巧,但是对于我要做的一件事,IIS的变化似乎过于复杂。在我对此的研究中,我没有找到使用处理程序1-2-3指南,包括一个这样的例子,所以它让我觉得我可能会滥用它或以错误的方式去做。 / p>
答案 0 :(得分:2)
是的,这几乎是它的工作原理。 (在Windows Server 2008中,您可以通过web.config进行设置,因此您无需在IIS中进行任何更改。)
如果使用尚未注册的扩展由ASP.NET引擎处理,则必须注册它。如果您使用已由ASP.NET处理的扩展名,例如.aspx,那么您不必在IIS中注册任何内容。 (当您在Visual Studio中的集成Web服务器中运行它时,所有内容都已由ASP.NET处理,这就是它在那里工作的原因。)