【问题标题】:How make static files in .NET CORE available only to authorized users?如何使 .NET CORE 中的静态文件仅对授权用户可用?
【发布时间】:2018-08-01 23:00:13
【问题描述】:
<img src="~/static/img1.jpg" />

我使用this article 启用静态文件,但这些代码不起作用。

[Authorize]
public IActionResult BannerImage()
{
     var file = Path.Combine(Directory.GetCurrentDirectory(), 
                        "MyStaticFiles", "images", "banner1.svg");

      return PhysicalFile(file, "image/svg+xml");
 }

another article 也没有帮助。 但我不知道如何让图片只对授权用户可用?

更新

我添加了将 WWWROOT 配置为静态目录来设置缓存头

 app.UseStaticFiles(new StaticFileOptions
 {
    FileProvider = new PhysicalFileProvider(
    Path.Combine(Directory.GetCurrentDirectory(), "WWWROOT"))
 });
 app.UseStaticFiles(new StaticFileOptions
    {
        FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), "MyStaticFiles")),
        OnPrepareResponse = x =>
        {
            if (x.Context.User.Identity.IsAuthenticated)
            {
                return;
            }

            x.Context.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
        }
    });

然后授权停止工作。

【问题讨论】:

  • 你也可以在Static file authorization文档中找到答案
  • 我将此链接添加到我的问题中。链接中的建议无效。
  • 设置,这不是重复的,因为他不想引入一些复杂的路径验证。
  • 你必须只有一个 usestaticfile 调用。将它们结合起来,一切都应该起作用。我不确定您是否能够使用两个不同的目录。静态文件应始终位于 wwwroot 中。
  • @alsami,我的静态文件位于项目之外。当我使用唯一一个 UseStaticFiles 授权时,WWROOT 目录的 css/js 文件也被阻止。

标签: asp.net-core


【解决方案1】:

就这样做

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseStaticFiles(new StaticFileOptions
        {
            OnPrepareResponse = x =>
            {
                if (x.Context.User.Identity.IsAuthenticated)
                {
                    return;
                }

                x.Context.Response.StatusCode = (int) HttpStatusCode.Unauthorized;
            }
        });
        app.UseDefaultFiles();
    }

【讨论】:

  • 我通过使用另一个 UseStaticFiles 实例添加了 WWWROOT 目录,并且您证明的授权代码停止工作。
  • 我不知道你添加另一个实例是什么意思。
  • 我用新的细节更新了问题。谢谢!
  • 我开始使用异常而不是返回 HTTP 状态码。在x.Context.Response.StatusCode = (int)HttpStatusCode.Unauthorized; 之前throw new UnauthorizedAccessException(); 之后。效果很好。
  • 这仅在使用的身份验证方案是默认身份验证方案时才有效,否则HttpContext.User 将不会更新(请参阅this issue)。
猜你喜欢
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多