我已经设置了一个dotnet核心API(在IIS8上),为(aurelia)应用程序打开了一个上传文件夹。我打开了这个文件夹的访问权限
app.UseFileServer(new FileServerOptions()
{
FileProvider = new PhysicalFileProvider(Configuration["ApiSettings:UploadsFolder"]),
RequestPath = new PathString("/uploads/"),
EnableDirectoryBrowsing = true
});
这很好用,因为应用程序可以通过URL打开应用程序中上传的图像。现在,我想在浏览器中直接输入URL时阻止访问这些图像。我见过C#解决方案但找不到dotnet核心解决方案。
我正在使用中间件来拦截发送到api的请求。但无法通过浏览器拦截特定图像请求并阻止它们。唯一允许访问图像的应该是我在固定域上的aurelia应用程序。
public async Task Invoke(HttpContext context)
{
StringValues referer;
context.Request.Headers.TryGetValue("Referer", out referer);
// Referer will contain the full URL of the image when requested
// via the browser. When its requested differently it will contain
// the url of the requesting application
if (referer.Any() && referer.First().Contains("/uploads/"))
{
context.Response.StatusCode = 401;
return;
}
await _next.Invoke(context);
}
有谁能告诉我阻止直接访问图片的最佳方法是什么,只允许某个应用程序加载图片?
答案 0 :(得分:1)
静态文件的请求没有达到中间位置,因为IIS的静态文件处理程序在它到达.NET Core之前处理请求。
只需从IIS中的“模块”功能中删除“StaticFileModule”(适用于您的.NET Core网站或服务器级别),并且请求应该通过。
以下是提及此问题的官方.NET Core文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files#considerations
修改强>
根据文件:
如果启用了IIS静态文件处理程序并且未正确配置ASP.NET核心模块(ANCM)(例如,如果未部署web.config),则将提供静态文件。
这实际上与我上面提到的相反。虽然删除静态文件处理程序仍应解决问题,但您还应检查ANCM配置。