【问题标题】:.net core 2.0 mvc + kestrel - how to lock down directories to controller actions?.net core 2.0 mvc + kestrel - 如何将目录锁定到控制器操作?
【发布时间】:2017-09-20 16:02:55
【问题描述】:

我的核心 2.0 应用设置了身份验证角色,并且我的控制器操作设置为 [Authorize(Roles="demo_user")]

授权工作得很好,我的问题是如何锁定内容目录并仅通过控制器操作为它们提供服务?

阅读一些文档,看来我需要根据这篇文章提供文档: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/static-files

而且我相信我感兴趣的信息是这一段:

静态文件授权静态文件模块不提供 授权检查。它提供的任何文件,包括那些在 wwwroot 是公开的。根据授权提供文件: 将它们存储在 wwwroot 和任何可访问的目录之外 静态文件中间件并通过控制器操作为它们提供服务, 返回应用授权的 FileResult

有没有人在 wwwroot 之外存储目录并通过控制器操作提供服务的示例?

【问题讨论】:

  • 您可以在this answer 中看到如何从控制器返回文件。然后由您决定如何将您的路由参数与您的文件相关联。
  • 您可以为您的私有文件添加一个文件夹,并在 startup.cs (app.Use) 中向中间件添加条件并检查请求路径。如果路径包含私有文件夹,您可以重定向回应

标签: c# asp.net-mvc asp.net-core kestrel-http-server


【解决方案1】:

要通过 ASP.NET Core 中的操作提供文件,您可以执行以下操作:

[Authorize]
public IActionResult GetMyFile()
{
    byte[] fileBytes = System.IO.File.ReadAllBytes("MyPrivateFiles/file1.txt");
    return new FileContentResult(fileBytes, "text/plain");
}

请记住,您的应用程序需要对 MyPrivateFiles 文件夹具有读取权限。

【讨论】:

  • 有没有读取和返回完整目录的例子?如果我将其他内容文件添加到特定目录,我不想将其硬编码到控制器中。
  • 您可以在您的操作中添加一个参数以返回具有特定名称的文件,并创建一个单独的操作来返回所有文件的列表。您的 .NET Core 应用程序可以像使用任何其他应用程序一样使用文件系统,但是您必须在控制器中创建与文件系统的接口,并使用您想要的任何功能。
猜你喜欢
  • 2018-04-22
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 2021-12-10
  • 2020-11-25
  • 1970-01-01
  • 2019-04-15
  • 1970-01-01
相关资源
最近更新 更多