Vous pouvez essayer d'étendre HttpRequestBase et remplacer la propriété Uri afin que vous puissiez affecter votre Uri à la propriété dans la requête. Puis remplacez HttpContextBase pour vous permettre de définir la propriété Request sur le contexte. Vous pouvez ensuite utiliser la méthode GetRouteData() sur la classe RouteCollection pour obtenir un RouteValueDictionary approprié. Notez que RouteCollection est disponible en tant que propriété statique sur la classe RouteTable.
var myRequest = new MyRequest(myUri);
var myContext = new MyContext(myRequest);
var routeData = RouteTable.Routes.GetRouteData(myContext);
Mise à jour:
Pour votre cas d'utilisation (commentaires), vous pourriez être en mesure de faire correspondre simplement sur le contrôleur/action:
Sur la base de la direction de @ tvanfosson
if (myUri.ToString().ToLower().Contains("/controller/action"))
{
return RedirectToAction(action, controller, new { ...route data });
}
else
{
return Redirect("http://www.example.com/default");
}
Note: Cela devrait probablement avoir quelques vérifications supplémentaires pour s'assurer que le Uri est absolu ... sinon, ça craps. – mkedobbs