2

我很肯定答案是「你不能這樣做」,但如果是這樣的話,ASP.NET MVC是非常有缺陷的。將請求傳回給ActionResult中的IIS

我有一個ActionResult需要提供一個靜態文件(文件名是在代碼中確定的)。出於性能原因(因爲我不想重新實現接受字節和緩存頭的HTTP規範),我想將請求交給IIS。像HttpModule中的context.RewritePath()一樣,當你給它一個靜態文件的名字。

除了需要在ActionResult內發生,不在PostAuthorizeRequest期間。看看FileStreamResult和FilePathResult類,很明顯它們只實現HTTP 200.TransferFile()很好,所有,但它不是內核緩存,它不處理Accept-bytes,If-Modified-自從,或Etags。

我們被告知,幾乎解碼有多好IIS是在提供文件服務,以及綜合管線是多麼的重要,在IIS6邪惡通配符映射是如何對性能等

現在我們回到同一條船 - 無法讓IIS從ActionResult提供靜態文件。 (NO,TransmitFile不計數)。

我甚至開始看到MS建議您將靜態內容放在單獨的服務器上。

請告訴我我錯了,有一個神奇的方法可以做到這一點。還是有集成管道夢被MVC殺死了?

+0

你有沒有找到合適的解決方案來解決這個問題?我還試圖將我的actionresult傳遞迴IIS,以便它可以提供靜態文件。 –

回答

0

爲什麼不使用RedirectRedirectPermanent

+0

重定向使等待時間加倍。性能不可接受。另外,我正在重寫的文件是訪問控制的。 –

+0

而不是將它寫成'HttpHandler'。 –

+0

或者HttpModule,而是。但[我的用戶](http://imageresizing.net)希望他們的ActionResult,他們會擁有它,無論我說什麼。我寧願給他們一些正確執行的東西。 –