2009-04-26 43 views
0

我对新项目有要求,要在某个日期之后提供一些“隐藏”资产(实际上只是藏在App_Data目录中)。在此之前,他们应该像他们不在那里一样。asp.net处理程序和扩展 - 我做得不对吗?

我已经用Page对象做了一百次这样的事情,但是当我开始研究这个时,我认为我会考虑处理程序。从未与他们合作(并被他们有点吓倒),我很高兴地发现他们将提供我的XML和JPG文件,而不需要整个Page类的开销。我很高兴我考虑过。我写它来处理像“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的变化似乎过于复杂。在我的研究中,我没有发现一个包含这样一个例子的处理程序的指导,所以它让我想我可能会滥用它或者以错误的方式去做。

回答

2

是的,这几乎是如何工作的。 (在Windows Server 2008中,存在远程机会,您可以从web.config执行设置,以便不必在IIS中更改任何内容。)

如果您使用尚未注册的扩展由ASP.NET引擎处理,你必须注册它。如果您使用已经由ASP.NET处理的扩展名,例如.aspx,那么您不必在IIS中注册任何内容。 (当你在Visual Studio中的集成web服务器上运行它时,所有的东西都已经被ASP.NET处理过了,这就是它在那里工作的原因。)