スタティックファイルの配信にASP.Netルーティング(MVCではなく)を使用できますか?ASP.NETルーティングを使用して静的ファイルを配信する
は私がルート
http://domain.tld/static/picture.jpg
へ
http://domain.tld/a/b/c/picture.jpg
にしたいと私は書き換えられたURLは、その場で計算されるという意味で動的にそれをしたいと言います。私は静的経路を一度に設定することはできません。私は/static/picture.jpg
から/a/b/c/picture.jpg
へのパスを書き換えることができ
routes.Add(
"StaticRoute", new Route("static/{file}", new FileRouteHandler())
);
FileRouteHandler.ProcessRequest
方法で:
とにかく、私はこのようなルートを作成することができます。私は静的ファイル用のハンドラを作成したいと思います。 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
を実装することですが、これを正しく行うと(rangeやetagsのようなHTTPをサポートしています)、簡単です。
ASP.NETで静的ファイルのルーティングにどのようにアプローチする必要がありますか?
私の場合は動作しますが、領域のビューフォルダでJSファイルを解析できません。修正するために、代わりに/Areas/MyArea/ClientScripts/foo.jsのような領域のベースフォルダ内の別のフォルダを使用します – eka808
何とか私はパズルの一部を見逃しているようです...あなたの静的ファイルへのルートを無視すると、 '/ static'から'/a/b/c'(OPが要求したもの)へのルーティングにどのように役立ちますか?あなたはあなたの答えにもっと光を当ててください、私は本当にこの解決策を理解したいと思います。 – Oliver
Oliverと合意すると、これはOPには答えず、解決策として受け入れられません。 – dhochee