在ActionResult中将请求传递回IIS



我很确定答案是"你不能这样做",但如果是这样,ASP。. NET MVC有可怕的缺陷。

我有一个ActionResult需要提供一个静态文件(文件名在代码中确定)。出于性能原因(也因为我不想为accept-bytes和缓存头重新实现HTTP规范),我想把请求交给IIS。就像HttpModule中的context.RewritePath()在你给它一个静态文件的名字时所做的那样。

除非这需要发生在ActionResult中,而不是在PostAuthorizeRequest中。

查看FileStreamResult和FilePathResult类,很明显它们只实现HTTP 200。TransmitFile()很好,但它不是内核缓存,也不处理Accept-bytes、If-Modified-Since或Etags。

我们几乎被告知IIS在服务文件方面有多好,集成管道有多重要,IIS6上的通配符映射对性能有多糟糕,等等。

现在我们又回到了同一条船上——没有办法让IIS从ActionResult中提供静态文件。(不,传输文件不计算在内)。

我甚至开始看到微软建议你把静态内容放在一个单独的服务器上。

请告诉我我错了,有一个神奇的方法可以做到这一点。或者集成的Pipe Dream已经被MVC杀死了?

为什么不用RedirectRedirectPermanent呢?

最新更新