Question

J'ai un routehandler personnalisé dans ASP.NET MVC2 pour attraper à un chemin préfixé de toutes les URL comme ceci:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new Route("@api/{*all}", new ApiHandler()));
routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}", // URL with parameters
  new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

Routing fonctionne très bien, mais si j'utilise Html.ActionLink ou ReturnToAction de retour () à partir d'un contrôleur, le uri construit crée un uri cassé comme ceci:

/@api?action=Add&controller=Home

au lieu de

/Home/Add

Comment puis-je influencer la logique de construction uri à considérer le modèle de route par défaut?

Était-ce utile?

La solution

Je suis venu avec un hack pour arrêter le comportement décrit. Bien que ce « résout » le problème, il est vraiment une sorte de méchant et je préférerais une manière plus propre à exclure une route de la logique de construction de chemin virtuel

routes.Add(
  new Route("@api/{*all}",
  // A random and unlikely controller name as the default
  new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } },
  // and a constraint requiring any controller to be that random, default value
  new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } }, 
  new ApiHandler()
);

Cela signifie que la route ne serait choisi pour la construction du chemin virtuel si le contrôleur en question était « qwewqewqeqweq », ce qui est peu probable que je l'espère. Je l'ai dit était très sale.

Autres conseils

vous pouvez spécifier le nom de la route en utilisant l'assistant RouteLink:

<%: Html.RouteLink("link text", "Default", 
    new { action = "add", controller = "home" }) %>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top