Записывать ошибки ModelState в аналитические сведения о приложении для каждого неверного запроса Http с использованием Web Api 2.x.

Я знаю, что могу создать ActionFilter, в котором я получу ModelState из текущего контекста действия. Я мог бы использовать TelemetryClient или ILogger (если он работает для старого веб-API) и делать ошибки вручную, добавляя их в свойства аналитики приложения. Но тогда у меня будет дважды один и тот же http-запрос с ошибкой 400. Перехвачено лазурью и моим из фильтра...

Какой интерфейс, связанный с Telemtry, мне нужно реализовать, где у меня также есть доступ к ModelState, чтобы я мог просто подключиться ко всему процессу отслеживания телеметрии?

Ни ITelemetryInitializer, ни ITelemetryProcessor не имеют доступа к ModelState!

Каков тогда правильный путь?


person HelloWorld    schedule 01.09.2020    source источник


Ответы (1)


У вас не так много вариантов, кроме регистрации Global ActionFilter или ResultFilter в вашем глобальном запуске для захвата ModelState и отслеживания запросов через TelemetryClient (не забудьте объявить его как статический, чтобы избежать нескольких экземпляров TelemetryClient). Чтобы устранить дублирование ведения журнала запросов встроенным модулем, вы можете отключить RequestTrackingTelemetryModule в ApplicationInsights.config, как показано ниже (закомментировано). И, конечно же, теперь вам нужно регистрировать все запросы в вашем новом фильтре действий, кроме тех, которые имеют ошибки проверки модели, поскольку теперь вы отключили встроенный.

<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
  <TelemetryModules>
    <Add Type="Microsoft.ApplicationInsights.WindowsServer.DeveloperModeWithDebuggerAttachedTelemetryModule, Microsoft.AI.WindowsServer" />
    <!--<Add Type="Microsoft.ApplicationInsights.Web.RequestTrackingTelemetryModule, Microsoft.AI.Web" />-->
  </TelemetryModules>
  <TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel" />
  <TelemetryInitializers>
    <Add Type="Microsoft.ApplicationInsights.Web.OperationNameTelemetryInitializer, Microsoft.AI.Web" />
    <Add Type="Microsoft.ApplicationInsights.Web.OperationIdTelemetryInitializer, Microsoft.AI.Web" />
  </TelemetryInitializers>
  <InstrumentationKey>00001111-2222-3333-4444-555566667777</InstrumentationKey>
</ApplicationInsights>
person krishg    schedule 02.09.2020
comment
но тогда другие запросы, неявно регистрируемые аналитикой приложений, не будут отслеживаться! - person HelloWorld; 02.09.2020
comment
другие запросы, как? - person krishg; 02.09.2020
comment
@HelloWorld хотел проверить, есть ли у вас новости по этому поводу. - person krishg; 11.09.2020