39 lines
1.1 KiB
C#
39 lines
1.1 KiB
C#
using BotPages.Core.Abstractions;
|
||
using BotPages.Core.Logging;
|
||
|
||
namespace BotPages.Core.Middleware;
|
||
|
||
/// <summary>
|
||
/// Middleware для глобальной ловли ошибок.
|
||
/// </summary>
|
||
public sealed class ErrorHandlingMiddleware : IPageMiddleware
|
||
{
|
||
private readonly ILogger _logger;
|
||
|
||
/// <inheritdoc/>
|
||
public ErrorHandlingMiddleware(ILogger logger)
|
||
{
|
||
_logger = logger;
|
||
}
|
||
|
||
/// <inheritdoc/>
|
||
public async Task InvokeAsync(PageContext ctx, Func<Task> next, CancellationToken ct)
|
||
{
|
||
try
|
||
{
|
||
await next();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_logger.Log(LogLevel.Critical, "Unhandled exception in middleware pipeline.", ex);
|
||
|
||
// Отправляем универсальный запрос с текстом об ошибке
|
||
await ctx.SendAsync(new SendRequest
|
||
{
|
||
ChatId = ctx.Update.Chat.Id,
|
||
Text = "Произошла ошибка при обработке запроса. Попробуйте ещё раз."
|
||
}, ct);
|
||
}
|
||
}
|
||
}
|