You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET(C#)如何禁止用户访问特定URL路径

禁止特定URL访问的实现方案

之前配置不生效的核心原因

你之前的配置存在两个核心问题,所以无法实现拦截效果:

  1. <location>节点的path属性仅支持填写应用内相对路径,不能填写带http://和域名的完整URL
  2. 如果你使用的是.NET Core/.NET 5+版本项目,框架本身不依赖Web.config、Global.asax处理请求管线,手动新建的这两个文件默认不会被框架加载,自然不会生效。

推荐实现方案(无需手动创建Web.config/Global.asax)

这个方案适配所有默认不生成Web.config、Global.asax的.NET Core/.NET 6+项目,拦截覆盖所有请求场景:不管用户直接在地址栏粘贴路径、页面跳转、还是直接请求路径下的静态资源,都会被拦截,是目前性能最高的实现方式:

  • 打开项目根目录下的Program.cs文件(.NET Core 3.1及更早版本打开Startup.cs)
  • 在app.UseAuthorization()中间件之前,加入自定义路径拦截逻辑,代码示例:
// 特定路径拦截中间件
app.Use(async (context, next) =>
{
    // 匹配需要拦截的路径,设置大小写不敏感匹配
    if (context.Request.Path.StartsWithSegments("/files", StringComparison.OrdinalIgnoreCase))
    {
        // 返回403禁止访问状态码,也可以根据需求自定义跳转页面
        context.Response.StatusCode = StatusCodes.Status403Forbidden;
        return;
    }
    // 非拦截路径正常放行
    await next();
});

传统.NET Framework 4.x项目修正方案

如果你使用的是传统.NET Framework项目,不需要编写额外代码,只需要修正Web.config配置即可:

  1. 将<location>节点的path属性改为相对路径,去掉域名和协议头
  2. 如果拦截路径下包含静态文件,需要开启所有请求走托管模块,否则静态文件会绕过授权规则直接返回
    修正后的配置代码:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <location path="files">
        <system.web>
            <authorization>
                <deny users="*"/>               
            </authorization>
        </system.web>
        <system.webServer>
            <modules runAllManagedModulesForAllRequests="true" />
        </system.webServer>
    </location>
</configuration>

注意:手动创建的Web.config需要在文件属性中把「复制到输出目录」设置为「如果较新则复制」,否则配置不会被IIS/框架加载。

内容的提问来源于stack exchange,提问作者user19111040

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 06:21:47