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

时间:2019-04-29 22:27:49

标签: asp.net owin

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

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

理想情况下,如果可能的话,我也想断开连接并且不使用HTTP 500响应调用者

1 个答案:

答案 0 :(得分:3)

WebAPI OWIN中间件无法处理的请求将传递到OWIN管道中的下一个中间件。这意味着您可以在WebAPI中间件之后添加自定义中间件,以处理与任何控制器/操作对都不匹配的请求。

如果所有REST API端点的基本路径都为/api,则可以将WebAPI和自定义中间件映射到该基本路径,以排除处理中对随机URL(例如/bot/probing.php)的请求。 / p>

用于配置上述管道的OWIN Startup类可以如下:

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();
                            });
                });
    }
}