2

Когда исключение не обрабатывается в нашем веб-API, код ответа 500 (Внутренняя ошибка сервера) вернется к клиенту.Замечания по применению и коды отказавших запросов

Хотя Application Insights не записывает это как 500, а скорее 200. Successful request - false, но код ответа по-прежнему не прав.

Application Insights failed request

Как я могу получить коды ответа corrrect в моей телеметрии?

стартапа Configure:

public void Configure(IApplicationBuilder app, IHostingEnvironment environment) 
{ 
    if (!TelemetryConfiguration.Active.DisableTelemetry) 
    { 
     // Add Application Insights to the beginning of the request pipeline to track HTTP request telemetry. 
     app.UseApplicationInsightsRequestTelemetry(); 

     // Add Application Insights exceptions handling to the request pipeline. Should be 
     // configured after all error handling middleware in the request pipeline. 
     app.UseApplicationInsightsExceptionTelemetry(); 
    } 

    app.UseRequireHttps(environment.IsLocal()); 
    app.UseMiddleware<NoCacheMiddleware>(); 
    app.UseJwtBearerAuthentication(...); 
    app.UseCors("CorsPolicy"); 
    app.UseStaticFiles(); 
    app.UseCompression(); 
    app.UseMvc(); 
} 
+0

Показать порядок, в котором регистрируются ваши промежуточное программное (из 'Configure') метод. Я ** подозреваю ** ваше промежуточное программное обеспечение исключения зарегистрировано до промежуточного программного обеспечения Application Insights – Tseng

+0

@Tseng: Вопрос отредактирован - спасибо – davenewza

ответ

2

Хотя Application Insights не записывает это как 500, а 200. Успешный запрос является ложным, но код ответа по-прежнему не так.

Насколько я знаю, если приложение не имеет промежуточного программного обеспечения обработки ошибок, приложение Insights сообщит код статуса ответа 200 при получении необработанного исключения. Мы можем найти подробную информацию от this article. Я использую следующий код в методе . Настройте, и я могу получить правильный код состояния ответа.

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    if (!Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration.Active.DisableTelemetry) 
    { 
     app.UseApplicationInsightsRequestTelemetry(); 

     app.UseApplicationInsightsExceptionTelemetry(); 
    } 

    loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    app.UseIISPlatformHandler(); 
    app.UseExceptionHandler(options => { 
     options.Run(
     async context => 
     { 
      context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; 
      context.Response.ContentType = "text/html"; 
      var ex = context.Features.Get<IExceptionHandlerFeature>(); 
      if (ex != null) 
      { 
       var err = $"<h1>Error: {ex.Error.Message}</h1>{ex.Error.StackTrace }"; 
       await context.Response.WriteAsync(err).ConfigureAwait(false); 
      } 
     }); 
    }); 

    app.UseStaticFiles(); 

    app.UseMvc(); 
} 

enter image description here

Смежные вопросы