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

如何为ASP.NET Core Web API设置未匹配端点的默认请求处理器?

如何在ASP.NET Core Web API中记录未匹配端点的404请求

完全可行,下面提供两种常用的实现方式:

方法一:使用自定义中间件(推荐)

在请求管道的末尾添加中间件,捕获所有未被前面中间件/端点处理的请求,记录日志后返回404。

在Program.cs中添加以下代码(需放在所有端点映射代码之后):

app.Use(async (context, next) =>
{
    await next();

    // 检查是否返回404且无匹配端点
    if (context.Response.StatusCode == StatusCodes.Status404NotFound && 
        context.GetEndpoint() == null)
    {
        var logger = context.RequestServices.GetRequiredService<ILogger<Program>>();
        logger.LogWarning("未匹配到API端点,请求路径:{Path},请求方法:{Method}", 
            context.Request.Path, context.Request.Method);
    }
});

// 确保中间件在端点映射之后执行
app.MapControllers();

关键提示:中间件顺序必须在MapControllers、MapGet等端点配置之后,才能保证只有未被处理的请求进入该逻辑。

方法二:配置自定义状态码页面

利用ASP.NET Core的状态码页面功能,针对404状态码添加日志逻辑。

在Program.cs中配置:

app.UseStatusCodePages(async context =>
{
    var response = context.HttpContext.Response;

    if (response.StatusCode == StatusCodes.Status404NotFound)
    {
        var logger = context.HttpContext.RequestServices.GetRequiredService<ILogger<Program>>();
        logger.LogWarning("请求未找到匹配端点,路径:{Path},方法:{Method}",
            context.HttpContext.Request.Path, context.HttpContext.Request.Method);
        
        // 保持默认404响应内容,若需JSON格式可修改此处
        context.HttpContext.Response.ContentType = "application/json";
        await context.HttpContext.Response.WriteAsync("{\"message\":\"未找到请求的资源\"}");
    }
});

app.MapControllers();

注意事项

  • 确保项目已默认配置ILogger服务(ASP.NET Core模板自带)。
  • 日志级别建议使用Warning,避免大量404日志干扰正常业务日志。
  • 若API使用路由前缀,日志中会自动记录完整请求路径无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 16:05:33