如何捕获由于 ASP.NET 中无法识别的 URL 路径导致的错误?

How do I capture errors due to unrecognized URL path in ASP.NET?

我有一个 ASP.NET 服务,它已经有 config.Services.Replace(typeof(IExceptionHandler), new MyExceptionHandler()); 在那里它跟踪特定的错误,所以没什么特别的。

我想更具体地说明如何跟踪无效 URL 的情况。 例如,如果我的服务有一个 controllers/methods 对应于请求 URL 中的各种 /api/controller/../method/.. 路径,我想跟踪与任何 controller/method 都不匹配的请求特殊标志,以便轻松过滤它们 - 我不想看到所有随机 /bot/probing.phphack/seeking.jsp 到 (1) 污染我的正常日志 (2) 丢失并且没有及时注意到。

理想情况下,如果可能的话,我还想切断连接而不用 HTTP 500 响应调用者

WebAPI OWIN 中间件无法处理的请求,将传递给 OWIN 管道中的下一个中间件。这意味着您可以在 WebAPI 中间件之后添加自定义中间件来处理不匹配任何 controller/action 对的请求。

此外,如果您所有的 REST API 端点都有一个基本路径 /api,您可以将 WebAPI 和您的自定义中间件映射到这个基本路径,以排除对随机 URL 的请求(像 /bot/probing.php) 来自 processing.

配置上述管道的 OWIN 启动 class 可以是以下内容:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.Map(
            "/api",
            apiApp =>
                {
                    var config = new HttpConfiguration();
                    WebApiConfig.Register(config);

                    app
                        .UseWebApi(config)
                        .Use(async (ctx, next) =>
                            {
                                Trace.TraceError(
                                    "WebApi routing error: {0}{1}",
                                    ctx.Request.PathBase, 
                                    ctx.Request.Path);
                                await next();
                            });
                });
    }
}