Возможно, вы попробуете расширить HttpRequestBase и переопределить свойство Uri, чтобы вы могли присвоить свой Uri собственности по запросу. Затем переопределите HttpContextBase, чтобы вы могли установить свойство Request в контексте. Затем вы можете использовать метод GetRouteData() в классе RouteCollection, чтобы получить подходящий RouteValueDictionary. Обратите внимание, что RouteCollection доступен как статическое свойство класса RouteTable.
var myRequest = new MyRequest(myUri);
var myContext = new MyContext(myRequest);
var routeData = RouteTable.Routes.GetRouteData(myContext);
Update:
Для вашего случая использования (комментарии), вы могли бы просто соответствовать на контроллер/действие:
if (myUri.ToString().ToLower().Contains("/controller/action"))
{
return RedirectToAction(action, controller, new { ...route data });
}
else
{
return Redirect("http://www.example.com/default");
}
Примечание. Это, вероятно, должно содержать дополнительную проверку, чтобы убедиться, что Uri является абсолютным ... в противном случае это дерьмо. – mkedobbs