我使用的是带有MVC的asp net core 2.0.5,我想在wwwroot之外提供一个静态文件夹。
我的输入文件如下所示。
wwwroot
staticfolder
10
index.html
image1.png
image2.png
sub-folder
image3.jpgindex.html是由其他程序生成的。所有图像都在index.html中使用。
我们希望在检查身份验证后进入服务器,即用户可以通过路径api/flight/10/index.html查看index.html。但我需要检查用户访问资源flight 10的权限。
我知道Physicalfile可以用来在wwwroot之外提供静态文件(例如*.png),还可以配置app.UseStaticFiles来为startup.cs中的文件夹和文件提供服务。
一些伪代码作为最小的例子。
[Route("api/flight/{flight}/index.html")]
[HttpGet]
public IActionResult GetImageThumbnail(
[FromRoute] int flight)
{
// Check permission
List<Flight> data = _context
.Flight(id: flight)
.ToList();
if (data.Count() == 0)
{
return NotFound("No permission.");
}
// data[0].BaseFolder is a folder outside wwwroot
string filename = data[0].BaseFolder + "/index.html";
// Return the content for index.html
...
}所以我的问题是,我应该如何使用上面类似的方法为一个混合了html和图像的文件夹提供服务。
发布于 2019-06-12 23:34:09
我找到了一个简单的解决方案来实现我的目标。在这里发帖,以防其他人也有同样的问题。
关键是使用{*file}设置路由,它将匹配末尾的任何字符串。
[Route("api/flight/{flight}/{*file}")]
[HttpGet]
public async Task<IActionResult> GetImageThumbnail([FromRoute]int flight,
[FromRoute] string file)
{
// Check permission
List<Flight> data = _context
.Flight(id: flight)
.ToList();
if (data.Count() == 0)
{
return NotFound("No permission.");
}
string filename = Path.Combine(data[0].BaseFolder, file);
var provider = new Microsoft.AspNetCore.StaticFiles.FileExtensionContentTypeProvider();
string minetype = "";
provider.TryGetContentType(filename, out minetype);
return PhysicalFile(filename, minetype);
}https://stackoverflow.com/questions/56537374
复制相似问题