ASP.NETルーティングを使用して静的ファイルを提供する
2023-08-30 15:43:44
質問
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
メソッドからパスを書き換えることができます。
/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
を実装することですが、適切に行うこと (範囲や etag のような HTTP のものをサポートすること) は、自明なことではありません。
ASP.NETで静的ファイルのルーティングにどのようにアプローチすべきですか?
どのように解決するのですか?
この問題を数時間掘り下げた結果、無視ルールを追加するだけで、静的ファイルが提供されるようになることがわかりました。
RegisterRoutes(RouteCollection routes)で、以下の無視ルールを追加します。
routes.IgnoreRoute("{file}.js");
routes.IgnoreRoute("{file}.html");
関連
-
NET 6の新しい設定オブジェクトConfigurationManagerの紹介
-
ASP.NET Core MVC フィルタ
-
ASP.NETのオンライン統計とアプリケーションとセッションを使用した訪問履歴
-
[解決済み] crossdomain.xmlファイルとは何ですか?
-
[解決済み] ASP.NET WebサイトとASP.NET Webアプリケーションのどちらを選ぶか?
-
[解決済み] [Solved] ASP.NET MS11-100: 投稿されたフォームの値の最大数の制限を変更するにはどうしたらいいですか?
-
[解決済み] web.configの変換で "Replace Or Insert "を行う方法はありますか?
-
[解決済み] Visual StudioのApp_Dataフォルダは何に使うのですか?
-
[解決済み] フォーム認証のタイムアウトとsessionStateのタイムアウトの比較
-
[解決済み] HTTPハンドラ vs HTTPモジュール
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ASP.NET Coreミドルウェアによるグローバル例外処理機構の利用について
-
名前 'xxx' が現在のコンテキストに存在しない エラー解決方法の1つ
-
ASP.NETのオンライン統計とアプリケーションとセッションを使用した訪問履歴
-
一時的なクラスを生成できない(result=1)、問題の解決方法
-
[解決済み] ASP.NET MVCでビューをコンパイルする
-
[解決済み】ASP.NET web.config: configSourceとファイル属性の比較
-
[解決済み] inheritInChildApplicationsを使用して子Webアプリケーションでweb.configの継承を回避する。
-
[解決済み] Visual Studio 新しいブラウザを開けない
-
[解決済み] パネルまたはPlaceHolderの使用
-
[解決済み] FormsAuthentication.SignOut()がユーザーをログアウトしない