我在wwwroot文件夹中有一组文件。使用webpack,我使用js.map文件生成js包。我想在* .map文件上加上安全性,只允许某些人访问它。
documentation of ASP.NET core static files得出结论,wwwroot中的所有文件都没有安全性。如果需要安全性,建议使用MVC控制器并在操作方法上加上安全性。
我想在wwwroot中使用一个捕获所有* .js.map URL的静态文件,这些URL执行安全性并给出一个未发现的内容。如何定义此操作方法。
我不想将地图文件放在不同的文件夹中,并以不同的方式提供服务。
答案 0 :(得分: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" }
);
});
动作方法如下所示。如果不允许访问,我们只返回NotFound()
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,否则永远无法访问action方法。