Вот как я делаю это в модульном тесте:
private string RouteValueDictionaryToUrl(RouteValueDictionary rvd)
{
var context = MvcMockHelpers.FakeHttpContext("~/");
// _routes is a RouteCollection
var vpd = _routes.GetVirtualPath(
new RequestContext(context, _
routes.GetRouteData(context)), rvd);
return vpd.VirtualPath;
}
За комментарии я адаптируюсь к контроллеру:
string path = RouteTable.Routes.GetVirtualPath(
new RequestContext(HttpContext,
RouteTable.Routes.GetRouteData(HttpContext)),
new RouteValueDictionary(
new { controller = "Foo",
action = "Bar" })).VirtualPath;
Заменить "Foo" и "Bar" настоящими именами. Это не в моей голове, поэтому я не могу гарантировать, что это наиболее эффективное из возможных решений, но оно должно привести вас на правильный путь.