35 lines
1016 B
C#
35 lines
1016 B
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);
|
|
|
|
// Теперь можно напрямую использовать PageContext для ответа
|
|
await ctx.SendTextAsync("Произошла ошибка при обработке запроса. Попробуйте ещё раз.", ct: ct);
|
|
}
|
|
}
|
|
}
|