Как я фиксирую ошибки из-за нераспознанного пути URL в ASP.NET? - PullRequest
4 голосов
/ 30 апреля 2019

У меня есть служба ASP.NET, в которой уже есть config.Services.Replace(typeof(IExceptionHandler), new MyExceptionHandler()); В ней прослеживается конкретная ошибка, поэтому ничего особенного.

Я хочу быть более конкретным о том, как обстоит дело с недопустимым URLотслеживается.Например, если у моей службы есть контроллеры / методы, которые соответствуют различным путям /api/controller/../method/.. в URL-адресе запроса, я хочу отслеживать запросы, которые не соответствуют ни одному контроллеру / методу, со специальным флагом, чтобы легко их фильтровать - я нене хочу видеть, как все случайные /bot/probing.php и hack/seeking.jsp для (1) загрязняют мои обычные журналы (2) теряются и не замечаются вовремя.

В идеале, я также хотел бы сократитьсоединение и не отвечать по HTTP 500 вызывающему абоненту, если это возможно

1 Ответ

3 голосов
/ 08 мая 2019

Запросы, которые не могут быть обработаны промежуточным программным обеспечением WebAPI OWIN, передаются следующему промежуточному программному обеспечению в конвейере OWIN. Это означает, что после промежуточного ПО WebAPI можно добавить пользовательское промежуточное ПО для обработки запросов, которые не соответствуют ни одной паре контроллер / действие.

Кроме того, если все ваши конечные точки API REST имеют базовый путь /api, вы можете сопоставить WebAPI и ваше пользовательское промежуточное программное обеспечение с этим базовым путем, чтобы исключить обработку запросов на случайные URL-адреса (например, /bot/probing.php).

Класс запуска OWIN, который настраивает описанный выше конвейер, может быть следующим:

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