public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            var asObjectResult = context.Result as ObjectResult;

            if (asObjectResult == null)
            {
                await next();

                return;
            }

            var rewriter = new LinkRewriter(_urlHelperFactory.GetUrlHelper(context));

            RewriteLinks(asObjectResult.Value, rewriter);

            await next();
        }
        private static void RewriteLinks(object input, LinkRewriter rewriter)
        {
            var allProperties = input.GetType().GetTypeInfo().GetAllProperties().ToArray();

            foreach (var linkProperty in allProperties.Where(p => p.CanWrite && typeof(ILink).IsAssignableFrom(p.PropertyType)))
            {
                var rewritten = rewriter.Rewrite(linkProperty.GetValue(input) as ILink);

                if (rewritten != null)
                {
                    linkProperty.SetValue(input, rewritten);
                }
            }

            foreach (var arrayProperty in allProperties.Where(p => p.PropertyType.IsArray))
            {
                var array = arrayProperty.GetValue(input) as Array ?? new Array[0];

                foreach (var element in array)
                {
                    RewriteLinks(element, rewriter);
                }
            }
        }