2009-04-26 42 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處理過了,這就是它在那裏工作的原因。)