找不到与 ActionContext 错误关联的 IRouter

Could not find an IRouter associated with the ActionContext Error

在我的应用程序中,我想在任何方法抛出 RedirectException 时使用重定向。 例如... 注意:ActivePeriodException 继承自 RedirectException

if  (Period.ActivePeriod(Db))
            throw new ActivePeriodException();

我的 ActivePeriodException class 是

public class ActivePeriodException : RedirectException
{
    public ActivePeriodException ()
    {
        PathRedirect = Constantes.PathMantenimiento;
    }

    protected ActivePeriodException (SerializationInfo serializationInfo, StreamingContext streamingContext) :
        base(serializationInfo, streamingContext)
    {
        PathRedirect = Constantes.PathMantenimiento;
    }

    public override string Message =>
        "Hello World :)";
}

这个例子让我震惊:

Could not find an IRouter associated with the ActionContext. If your application is using endpoint routing then you can get a IUrlHelperFactory with dependency injection and use it to create a UrlHelper, or use Microsoft.AspNetCore.Routing.LinkGenerator.

public override void OnException(ExceptionContext context)
    {
        _logger = ApplicationLogging.LoggerFactory.CreateLogger(context.RouteData.Values["controller"].ToString());
        HandleCustomException(context);
        base.OnException(context);
    }

    private void HandleCustomException(ExceptionContext context)
    {
        if (context.Exception is RedirectException exception)
        {
            var urlHelper = new UrlHelper(context);
            var path = exception.PathRedirect;
            path = IsHTTP(path) ? path : urlHelper.RouteUrl(path); //HERE IS THE PROBLEM
            _logger.LogInformation(ApplicationLogging.ExceptionMessage(context.Exception));
            Session.MsjErrorView = exception.Message;
            context.HttpContext.Response.Redirect(path);
            FuncionesUtiles.ArmarRespuestaErrorRedirect(context, path);
            
            if (exception.NotificarViaMail)
                MailHelper.MandarMail(MailHelper.GetMensajeMailDeError(context), new List<string> { Configuracion.GetValueFromCache(Configuraciones.MailEnvioErrores) }, Constantes.MailSubject);
        }
        else if (context.Exception is CustomException)
        {
            _logger.LogInformation(ApplicationLogging.ExceptionMessage(context.Exception));
            FuncionesUtiles.ArmarMsgRespuestaError(context, null);
        }
    }

我该如何解决这个问题?

尝试使用从上下文服务解析的 IUrlHelperFactory 构建 UrlHelper

public void OnException(ExceptionContext context)
{
    // ...
    var urlHelperFactory = context.HttpContext.RequestServices.GetRequiredService<IUrlHelperFactory>();
    var urlHelper = urlHelperFactory.GetUrlHelper(context);
    // ...
}