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

.NET Core 3.1如何禁用根路径仅允许/Website1前缀路由访问?

禁用.NET Core 3.1项目的根路径访问,仅保留指定前缀路径

你遇到的问题是因为app.UsePathBase("/Website1")仅用于设置请求路径的基准前缀,并不会自动拦截根路径的请求。要实现仅允许带/Website1前缀的路径访问,可通过以下两种方式处理:

方法一:添加自定义中间件拦截根路径

在Configure方法中,插入一段自定义中间件,检查请求路径是否为根路径,若是则直接返回404(或自定义响应)。注意将这段中间件放在UsePathBase之后、UseRouting之前:

// 先设置路径基准
app.UsePathBase("/Website1");

// 添加根路径拦截中间件
app.Use(async (context, next) =>
{
    if (context.Request.Path == "/")
    {
        context.Response.StatusCode = StatusCodes.Status404NotFound;
        await context.Response.WriteAsync("该路径不允许访问");
        return;
    }
    await next();
});

// 后续路由与端点配置
app.UseRouting();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
});

方法二:使用URL重写中间件拦截根路径

若偏好官方组件,可配置URL重写规则拦截根路径请求:

var rewriteOptions = new RewriteOptions()
    .Add(context =>
    {
        if (context.HttpContext.Request.Path == "/")
        {
            context.HttpContext.Response.StatusCode = StatusCodes.Status404NotFound;
            context.Result = RuleResult.EndResponse; // 终止后续中间件处理
        }
    });

app.UseRewriter(rewriteOptions);
app.UsePathBase("/Website1");

// 后续路由配置
app.UseRouting();
// ...其他中间件与端点配置

验证效果

配置完成后测试:

  • 访问http://localhost:5000/会返回404或自定义提示
  • 访问http://localhost:5000/Website1及子路径(如/Website1/Home/Index)可正常访问

这样就能模拟生产环境中仅foo.bar.edu/Website1前缀路径可访问的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:12:21