2017-10-03 6 views
0

私はwwwrootフォルダーに一連のファイルを持っています。 webpackでは、js.mapファイルでjsバンドルを生成します。私は* .mapファイルにセキュリティを置いて、特定の人にアクセスできるようにしたい。すべてのファイル拡張子コントローラーアクションを静的ファイルと一緒にキャッチ

documentation of ASP.NET core static filesは、wwwrootのすべてのファイルにセキュリティがないと結論付けています。セキュリティが必要な場合は、MVCコントローラを作成し、アクションメソッドにセキュリティを設定するためのアドバイスが必要です。

セキュリティを実行し、notfoundを与える1つのcatch all * .js.map URLを持つwwwrootの静的ファイルを作成したいとします。このアクションメソッドを定義するにはどうすればいいですか?

地図ファイルを別のフォルダに置いて別々の場所に置いてはいけません。

+0

私がすでに近づいているが、サブフォルダ内のファイルをマップすることはできません:[Route( "{url:regex((。*?)map.js)}")] –

答えて

0

はのcatchAllテンプレートと制約で、このようなルートを定義します。

 app.UseMvc(routes => 
     { 
      // https://haacked.com/archive/2008/07/14/make-routing-ignore-requests-for-a-file-extension.aspx/ 
      routes.MapRoute(
       name: "MapFiles", 
       template: "{*relativeFileUrl}", 
       defaults: new { controller = "FileSystem", action = "AccessDevFile" }, 
       constraints: new { relativeFileUrl = @".*\.js.map" } 
      ); 
     }); 

アクションメソッドは次のようになります。何のアクセスが許可されていない場合は我々だけで

public IActionResult AccessDevFile(string relativeFileUrl) 
    { 
     bool hasAccess = ... do your check ... 
     if(hasAccess) 
     { 
      return base.PhysicalFile(_hostingEnvironment.WebRootPath + "\\" + relativeFileUrl.Replace("/", @"\"), "application/json"); 
     } 

     return NotFound(); 
    } 

もUserStaticFilesは、そうでない場合はアクションメソッドに到達することはできません呼び出す前にUseMvcコールを持っていることを確認してください()NOTFOUNDを返します。

関連する問題