AddWebhookNotification для вызова метода в контроллере

Я настроил это в моем StartUp.cs:

    public void ConfigureServices(IServiceCollection services)
    {
        services
            .ConfigureEmail(Configuration)
            .AddHealthChecksUI(setupSettings: setup =>
            {
                setup
                    .AddWebhookNotification("WebHookTest", "/WebhookNotificationError",
                        "{ message: \"Webhook report for [[LIVENESS]]: [[FAILURE]] - Description: [[DESCRIPTIONS]]\"}",
                        "{ message: \"[[LIVENESS]] is back to life\"}",
                        customMessageFunc: report =>
                        {
                            var failing = report.Entries.Where(e => e.Value.Status == UIHealthStatus.Unhealthy);
                            return $"{failing.Count()} healthchecks are failing";
                        },
                        customDescriptionFunc: report =>
                        {
                            var failing = report.Entries.Where(e => e.Value.Status == UIHealthStatus.Unhealthy);
                            return $"HealthChecks with names {string.Join("/", failing.Select(f => f.Key))} are failing";
                        });
            })
            .AddControllers();
    }

    public void Configure(IApplicationBuilder app)
    {
        var pathBase = Configuration["PATH_BASE"];
        if (!string.IsNullOrEmpty(pathBase))
        {
            app.UsePathBase(pathBase);
        }
    
        app.ConfigureExceptionHandler();
        app
            .UseRouting()
            .UseEndpoints(endpoints =>
            {
                endpoints.MapHealthChecksUI(options =>
                {
                    options.ResourcesPath = string.IsNullOrEmpty(pathBase) ? "/ui/resources" : $"{pathBase}/ui/resources";
                    options.UIPath = "/hc-ui";
                    options.ApiPath = "/api-ui";
                });
                endpoints.MapDefaultControllerRoute();
            });
    }

И в Контроллере:

    [HttpPost]
    [Consumes(MediaTypeNames.Application.Json)]
    public async Task<IActionResult> WebhookNotificationError([FromBody] string id)
    {
        MimeMessage mimeMessage = new MimeMessage { Priority = MessagePriority.Urgent };
        mimeMessage.To.Add(new MailboxAddress(_configuration.GetValue<string>("ConfiguracionCorreoBase:ToEmail")));
        mimeMessage.Subject = "WebHook Error";
        BodyBuilder builder = new BodyBuilder { HtmlBody = id };
        mimeMessage.Body = builder.ToMessageBody();
        await _appEmailService.SendAsync(mimeMessage);
        return Ok();
    }

Приложение сторожевого таймера настроено в appSettings.json для прослушивания различных API. Пока все работает нормально, но, если я вызываю ошибку, я хочу получить уведомление по электронной почте. Идея состоит в том, что при возникновении ошибки в каком-либо из Healths вы отправляете электронное письмо.

Среда:

  • Версия .NET Core: 3.1
  • Версия Healthchecks: AspNetCore.HealthChecks.UI 3.1.0
  • Операционная система: Windows 10

person Nacho    schedule 24.06.2020    source источник


Ответы (2)


Похоже, у вас проблемы с маршрутами. Вы проверили этот метод с Почтальоном? Также проверьте, является ли тело вашего запроса webHook текстом, попробуйте изменить полезную нагрузку шаблона:

{message: отчет веб-перехватчика для [[LIVENESS]]: [[FAILURE]] - Описание: [[DESCRIPTIONS]]},

и в контроллере измените строку на объект. И проверьте, что вы получаете в DEBUG.

person V.Malyk    schedule 16.07.2020

Попробуйте использовать Api/WebhookNotificationError inst. из /WebhookNotificationError, если ваш контроллер ApiController. Похоже, что имя контроллера отсутствует

person procma    schedule 01.10.2020