c# - 在 MVC6 中,如何阻止直接访问 wwwroot 中的文件夹?

标签 c# angularjs asp.net-core-mvc asp.net-core

我们正在最新的 MVC 框架中开发一个应用程序,到目前为止一切都很好。在我们的应用程序中,我们决定在 wwwroot/app 下的项目中嵌入一个 Angular 应用程序。我创建了一个应用程序 Controller 并查看并禁止访问该应用程序,除非用户获得授权。当未经授权的用户尝试访问 localhost/app 时,这非常有用——它会将他们踢回 C# 应用程序登录页面。

我想更进一步,还禁止访问该文件夹中的直接文件,例如 localhost/app/scripts/controllers/name.js 或部分 html 文件/app/partials/name-partial.html。过去我会进入 web.config 并添加以下代码,但我还没有找到最新框架的等效代码。理想情况下,如果可能的话,我希望这是 startup.cs 或 appsettings.json 中的一个条目

  <location path="app">
    <system.web>
      <authorization>
        <allow roles="User" />
        <deny roles="*" />
      </authorization>
    </system.web>
  </location>

最佳答案

经过进一步研究,似乎实现您想要的最简单方法是在配置 UseStaticFiles 时实际使用 OnPrepareResponse StaticFileOption。

以下内容将放在 Startup.cs 中:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
    ILoggerFactory loggerFactory)
{
    app.UseStaticFiles(new StaticFileOptions()
    {
        OnPrepareResponse = s =>
        {
            if (s.Context.Request.Path.StartsWithSegments(new PathString("/app")) && 
               !s.Context.User.Identity.IsAuthenticated)
            {
                s.Context.Response.StatusCode = 401;
                s.Context.Response.Body = Stream.Null;
                s.Context.Response.ContentLength = 0;
            }
        }
    });
}

以上代码只会在 wwwroot 中执行静态文件时运行,特别是在以“/app”段开头的任何路径中。如果未通过身份验证,它会重写响应,以便正常内容不会连同适当的状态代码一起传递给客户端。

关于c# - 在 MVC6 中,如何阻止直接访问 wwwroot 中的文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34667974/

相关文章:

javascript - 通过 $http 进行 Angular json 编码

javascript - Angular-material md-select 会切断背景到内容的边缘吗?

c# - 将 EF 查询限制为具有 TPT 继承的基类型

c# - TeamCity 代码覆盖率意外结果

c# - 试图提取字符串中间的代码

c# - 什么是后置条件异常?

javascript - 我的自定义指令中未定义 Controller ngModel

razor - MVC Core 添加下拉列表以查看

javascript - Jstree - 在所有 Jstree 中每次只允许检查一个节点

npm - VS2015 CTP6 中嵌套 node_modules 的 "FullPath cannot be applied"错误