ASP.Netルーティング(MVCではない)を使用して静的ファイルを提供できますか?
ルーティングしたい
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
書き換えることができます。次に、静的ファイルのハンドラーを作成します。ASP.NETは、この目的でを使用します。残念ながら、このクラスは内部です。リフレクションを使用してハンドラーを作成しようとしましたが、実際に機能します。/static/picture.jpg
/a/b/c/picture.jpg
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);
しかし、内部型を使用することは適切な解決策ではないようです。もう1つのオプションは、独自の実装ですStaticFileHandler
が、適切に実装する(範囲やetagなどのHTTP関連のものをサポートする)ことは簡単ではありません。
ASP.NETで静的ファイルのルーティングにどのようにアプローチする必要がありますか?