質問

DownloadsというMVCコントローラーがあります。 http:// mysite / Downloads

http://mysite/Downloads/MyFile.zipという物理フォルダーに物理ファイルを配置したい

フォルダを作成するだけの場合、 http:// mysite / Downloads にアクセスすると403が表示されます。 (ほとんどの場合、ディレクトリの参照が無効になっています) しかし、代わりにMVCコントローラーを起動したいです。

どうすればいいですか?

役に立ちましたか?

解決

http:// mysite / Downloads / {ACTION} を参照すると、コントローラーアクションが起動します。

この例で機能しないのは、アクションのない / Downloads だけです。このURLを書き換えて、デフォルトのアクションにリダイレクトできます。

さらに、ルートハンドラーにダウンロードファイルを無視させる必要があります。 global.asaxファイルに行を追加して、すべてのzipファイルまたはその他の適切な無視パターンを無視できます。

routes.Ignore("{resource}.zip");

他のヒント

.NET 3.5以降、既存のファイルをルーティングできます:

public static void RegisterRoutes(RouteCollection routes) {
    routes.RouteExistingFiles = true;
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
       name: "Default",
       url: "{controller}/{action}/{id}",
       defaults: new { controller = "Home", 
                          action = "Index", 
                          id = UrlParameter.Optional }
    );
}

audio.mp3 ファイルを含む Markets というサイトルートにフォルダーがあるとします:

\Markets
\Markets\audio.mp3

MarketsController が存在すると仮定して、 Markets をリクエストした場合、 Markets / Index にルーティングされます。

/Markets/audio.mp3 をリクエストした場合、mp3ファイルを取得し、 Markets / AnythingElse をリクエストした場合、通常のルーティングが適用されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top