Просто создайте UrlHelper из свойства RequestContext HtmlHelper и используйте его для генерации URL:
var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
var url = urlHelper.Action("CaptionCategory", new { id = caption.Code });
или в вашем конкретном случае используйте помощник html для генерации якоря вместо того, чтобы жестко кодировать его, как вы это сделали:
sb.AppendLine("<li>");
sb.AppendLine(
helper.ActionLink(
caption,
"CaptionCategory",
new { id = caption.Code }
).ToHtmlString()
);
sb.AppendLine("</li>");
Чтобы это работало, вы, очевидно, должны добавить using System.Web.Mvc.Html;
в начало вашего файла, чтобы вывести метод расширения ActionLink
в область действия.