2009-09-17 22 views
11

ダウンロードと呼ばれるMVCコントローラがあります。 http://mysite/DownloadsフォルダとコントローラをASP.NET MVCで同じ名前にするにはどうすればいいですか?

実際のファイルをhttp://mysite/Downloads/MyFile.zipという物理フォルダに入れたいと思っています。

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

どうすればよいですか?

答えて

5

http://mysite/Downloads/{ACTION}を参照すると、コントローラの処理が開始されます。

あなたの例では機能しない唯一のものは、動作のない/Downloadsです。このURLを書き換えて、デフォルトのアクションにリダイレクトすることができます。

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

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

は、.NET 3.5ので、あなたがルート既存のファイルができます。

\Markets 
\Markets\audio.mp3 

と仮定:だから

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と呼ばれますMarketsControllerが存在する場合、Marketsをリクエストした場合、Markets/Indexにルーティングされます。

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

関連する問題