我们正在开发一个最新的MVC框架中的应用程序,到目前为止一切都很棒.在我们的应用程序中,我们决定在wwwroot/app下的项目中嵌入一个角度应用程序.我创建了一个app控制器并查看和禁止访问该应用程序,除非用户获得授权.当未经授权的用户尝试访问localhost/app时,这很有效 - 它将它们踢回C#应用程序登录页面.
我想更进一步,并禁止访问该文件夹中的直接文件,例如localhost/app/scripts/controllers/name.js或部分html文件/app/partials/name-partial.html.在过去,我将进入web.config并添加以下代码,但我没有找到最新框架的等效项.理想情况下,如果可能,我希望这是startup.cs或appsettings.json中的条目
David L.. 5
经过额外的研究,似乎最简单的方法就是在配置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; } } }); }
上述代码仅在执行静态文件WITHIN wwwroot时运行,特别是在以"/ app"段开头的任何路径中运行.如果未经过身份验证,则会重写响应,以便不会将正常内容以及相应的状态代码传递给客户端.
经过额外的研究,似乎最简单的方法就是在配置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; } } }); }
上述代码仅在执行静态文件WITHIN wwwroot时运行,特别是在以"/ app"段开头的任何路径中运行.如果未经过身份验证,则会重写响应,以便不会将正常内容以及相应的状态代码传递给客户端.