ASP.Net路由(而不是MVC)可用於提供靜態文件嗎?使用ASP.NET路由來提供靜態文件
說我想航線
http://domain.tld/static/picture.jpg
到
http://domain.tld/a/b/c/picture.jpg
,我要動態地做它在這個意義上,重寫URL計算的飛行。我無法一勞永逸地設置一條靜態路由。
反正,我可以創造這樣的路線:
routes.Add(
"StaticRoute", new Route("static/{file}", new FileRouteHandler())
);
在FileRouteHandler.ProcessRequest
方法我可以重寫從/static/picture.jpg
到/a/b/c/picture.jpg
的路徑。然後我想爲靜態文件創建一個處理程序。 ASP.NET爲此使用StaticFileHandler
。不幸的是,這門課是內部的。我試圖創建使用反射處理程序,它實際上工作:
Assembly assembly = Assembly.GetAssembly(typeof(IHttpHandler));
Type staticFileHandlerType = assembly.GetType("System.Web.StaticFileHandler");
ConstructorInfo constructorInfo = staticFileHandlerType.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, Type.EmptyTypes, null);
return (IHttpHandler) constructorInfo.Invoke(null);
但使用內部類型似乎不是正確的解決方案。另一個選擇是實現我自己的StaticFileHandler
,但是正確執行(支持範圍和etags之類的HTTP內容)並不重要。
我應該如何處理ASP.NET中靜態文件的路由?
我寧願這種做法,也是如此。將它移出到管道,並讓IIS工作進程處理重定向比通過運行時實際處理路徑的循環更有效,我假設。即使服務器上的流失量大致相同,我也會選擇不使用路由的路由(雙關語),並將重定向保留在應用程序之外。 – 2009-07-26 19:00:22
從我的問題的最初版本中不清楚的是,重寫的URL是即時計算的(我不擔心這裏的性能)。我已經更新了這個問題來澄清這一點。無論如何,謝謝你的回覆。 – 2009-07-26 20:52:47
(刪除我以前的評論,並重新添加一個非縮短的網址)。除了性能問題之外,爲什麼要在應用程序中處理這個URL,在外部處理時會更好?我想你可以創建一個處理這個的控制器動作,但這裏有一些你可以看看的東西: - http://geekswithblogs.net/sankarsan/archive/2009/01/18/developing-custom-routehandler.aspx – 2011-07-20 11:52:36