阻止访问 asp.net 的静态内容 - mvc 应用程序
prevent access to static content of asp.net - mvc app
我们有 asp.net MVC 和 angular 应用程序。我们正在使用 identityserver3 对应用程序进行访问控制。
一切都按预期工作,除了一件事。
未经授权的用户仍然可以访问应用程序的静态内容。
有没有办法在用户登录之前拒绝访问这些文件?
您可以将此添加到您的 web.config
<location path="your/path/tostaticfiles">
<system.web>
<authorization>
<deny users="?" /> //Denies unauthorized users
</authorization>
</system.web>
</location>
这是伟大的 post 的 link,这让我找到了解决方案 => Intercepting file requests
我为解决问题采取的步骤:
将此行添加到我的 webconfig 文件中。
这将确保 js 文件请求不会被处理程序处理。
<system.webServer>
<handlers>
<add name="JSFileHandler" path="*.js" verb="GET"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
注册路线。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.RouteExistingFiles = true;
routes.MapRoute(
"staticfiles"
, "{*src}"
, new { Controller = "Main", action = "GetJS" }
, new { src = @"(.*?)\.(js)" } // URL constraints
);
Return 来自控制器操作的文件
public ActionResult GetJS()
{
var path = this.Url.RouteUrl("staticfiles");
return File(path,
System.Net.Mime.MediaTypeNames.Application.Octet,
Path.GetFileName(path));
}
除了位置部分,您还需要指示 IIS ASP.NET 将处理这些文件 (runAllManagedModulesForAllRequests="true")。
在(system.web 节点的兄弟姐妹)旁边:
<location path="Scripts">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
在system.web服务器节点下:
<modules runAllManagedModulesForAllRequests="true">
注意:使用 users="*" 而不是 users="?"如果您不想让任何用户访问您的文件。在我的例子中,我这样做是为了防止访问我的 JS 文件,并使用捆绑包为它们提供服务。
我们有 asp.net MVC 和 angular 应用程序。我们正在使用 identityserver3 对应用程序进行访问控制。 一切都按预期工作,除了一件事。 未经授权的用户仍然可以访问应用程序的静态内容。
有没有办法在用户登录之前拒绝访问这些文件?
您可以将此添加到您的 web.config
<location path="your/path/tostaticfiles">
<system.web>
<authorization>
<deny users="?" /> //Denies unauthorized users
</authorization>
</system.web>
</location>
这是伟大的 post 的 link,这让我找到了解决方案 => Intercepting file requests
我为解决问题采取的步骤:
将此行添加到我的 webconfig 文件中。 这将确保 js 文件请求不会被处理程序处理。
<system.webServer> <handlers> <add name="JSFileHandler" path="*.js" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> </handlers> </system.webServer>
注册路线。
routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.RouteExistingFiles = true; routes.MapRoute( "staticfiles" , "{*src}" , new { Controller = "Main", action = "GetJS" } , new { src = @"(.*?)\.(js)" } // URL constraints );
Return 来自控制器操作的文件
public ActionResult GetJS() { var path = this.Url.RouteUrl("staticfiles"); return File(path, System.Net.Mime.MediaTypeNames.Application.Octet, Path.GetFileName(path)); }
除了位置部分,您还需要指示 IIS ASP.NET 将处理这些文件 (runAllManagedModulesForAllRequests="true")。
在(system.web 节点的兄弟姐妹)旁边:
<location path="Scripts">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
在system.web服务器节点下:
<modules runAllManagedModulesForAllRequests="true">
注意:使用 users="*" 而不是 users="?"如果您不想让任何用户访问您的文件。在我的例子中,我这样做是为了防止访问我的 JS 文件,并使用捆绑包为它们提供服务。