2014-02-18 121 views
0

我正在開發一個ASP.NET應用程序,它需要能夠服務包含範圍請求的文件。 ASP.NET MVC團隊曾表示they won't support this within MVC,並建議使用IIS來提供靜態文件。支持字節範圍

這是我的問題。當用戶提出請求時,他們不會在將直接映射到文件的URL中包含任何標識信息。請求可能如下所示:http://whatever.com/Download?ID=TXlGaWxlLnhv34lk。在MVC中,我需要進行Web服務調用以將該ID解析爲最終將位於網絡共享上的文件。另外,我們有我們自己的定製授權機制,每個請求在我們服務文件之前都必須經過。

TomaszPęczek實現了一個名爲RangeFileResult的自定義ActionResult,它似乎正在重新實現IIS默認做的範圍請求支持。我試過使用它,它似乎工作......但我覺得應該有辦法讓IIS爲我服務的靜態文件。因此,最終,我想知道是否有可能讓MVC接收請求,驗證&授權,將ID解析爲網絡共享上的文件路徑,然後退回到IIS的StaticFile處理程序以實際返回文件信息。

回答

0

是的,查找真實文件位置然後將用戶重定向到該位置以下載文件確實很容易。但是,你真正的問題是靜態文件的認證。你如何做到這一點取決於你的要求(即,它們是否應該在下載之後仍然可以訪問?每個文件是否應單獨授權?是否可以訪問所有文件?是否需要做額外的工作,比如將數據放入數據庫之後一個下載完成...這裏有很多變量,他們都提出了不同的解決方案

+0

當你說「重定向用戶到那個位置」,你是什麼意思?你是否設想用戶的瀏覽器是真的重定向到一個新的頁面?如果是這樣,這不是我要找的。唯一的訪問文件應該通過帶有文檔ID的URL 只要授權,它需要檢查每一次,不管它是否已經被下載過,授權是基於每個文件的,而不是基於每個目錄的,我可能需要額外的之後工作 - 例如將下載請求寫入審計日誌。 – Keith

+0

@凱斯 - 你的建議是不可能的。一旦你開始ASP.NET處理程序,你不能再有IIS處理任何東西。響應必須通過asp.net響應返回。獲得本地IIS處理的唯一方法是讓IIS處理請求,如果你這樣做,你不能讓asp.net處理請求。 –

+0

謝謝,Erik。雖然這不是一個解決方案,但它是一個答案! – Keith