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

使用自定义中间件后GET请求返回404,.NET Core技术问题求助

解决.NET Core自定义ApiKey中间件导致404的问题

兄弟,我之前也踩过这个一模一样的坑!你遇到的404问题,十有八九是你的ApiKeyMiddleWare没有正确把请求传递到后续的中间件管道里,导致请求根本没到达路由匹配环节,自然返回404了。

核心问题:忘记调用管道的下一个中间件

自定义中间件的InvokeAsync方法里,必须在校验通过后调用await next(context),否则请求会在你的中间件这里被截断,无法到达后面的路由、控制器逻辑。

给你一个正确的中间件示例参考:

public class ApiKeyMiddleWare
{
    private readonly RequestDelegate _next;

    public ApiKeyMiddleWare(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // 检查请求头中的user-key字段
        if (!context.Request.Headers.TryGetValue("user-key", out var apiKey))
        {
            context.Response.StatusCode = StatusCodes.Status400BadRequest;
            await context.Response.WriteAsync("请求头缺少必填的user-key字段");
            return; // 校验失败,直接返回,不调用后续中间件
        }

        // 校验通过!一定要调用_next把请求传给下一个中间件
        await _next(context);
    }
}

如果你的代码里没有await _next(context)这一行,赶紧加上——这是最常见的触发原因。

次要检查点:中间件的注册顺序

.NET Core中间件的执行顺序非常关键,你的ApiKeyMiddleWare需要放在正确的位置:

  • 可以放在app.UseRouting()之前(对所有进入管道的请求做校验),也可以放在UseRouting之后、UseEndpoints()之前,但绝对不能放在UseEndpoints之后(因为请求到这里已经结束了,中间件根本不会被触发)。

给你一个正确的Startup.cs的Configure方法示例:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.UseHttpsRedirection();

    // 注册你的ApiKey中间件,位置要在路由相关中间件之前或中间
    app.UseMiddleware<ApiKeyMiddleWare>();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

额外排查项

如果上面两点都没问题,那可以检查下:

  • 你的中间件有没有意外修改了context.Request.Path或者其他请求属性,导致路由无法匹配到对应的控制器;
  • 有没有在校验通过后做了其他截断请求的操作(比如提前调用了context.Response.CompleteAsync())。

如果还是解决不了,把你的ApiKeyMiddleWare.cs和Startup.cs的完整代码贴出来,我再帮你仔细排查!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:59:00