我有一个ASP.NET服务,该服务已经有config.Services.Replace(typeof(IExceptionHandler), new MyExceptionHandler());
它在那里跟踪特定的错误,因此没有什么特别的。
我想更详细地说明如何跟踪无效URL的情况。
例如,如果我的服务具有与请求URL中的各种/api/controller/../method/..
路径相对应的控制器/方法,那么我想使用特殊标志跟踪与任何控制器/方法都不匹配的请求,以轻松过滤它们-我不想看到所有随机(/bot/probing.php
和hack/seeking.jsp
到(1)污染我的正常日志(2)丢失并且没有及时注意到。
理想情况下,如果可能的话,我也想断开连接并且不使用HTTP 500响应调用者
答案 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();
});
});
}
}