Frage

Ich habe einen benutzerdefinierten routehandler in ASP.NET MVC2 alle wie dies bei einem vorher festgelegten Pfad der URL zu fangen:

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 funktioniert gut, aber wenn ich verwende Html.ActionLink oder Rückgabe ReturnToAction () von einem Controller, baute die uri schafft ein gebrochenes uri wie folgt aus:

/@api?action=Add&controller=Home

statt

/Home/Add

Wie kann ich die uri Gebäude Logik beeinflussen die Standardroute Muster zu beachten?

War es hilfreich?

Lösung

Ich habe mit einem Hack gekommen, um das beschriebene Verhalten zu stoppen. Während dieses „löst“ das Problem, es ist wirklich Art von fiesen und ich würde einen sauberere Weg bevorzugt den Weg vom virtuellen Pfad Gebäuden Logik ausschließen

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()
);

Das bedeutet, dass der Weg würde nur für Virtual Path Gebäude gewählt werden, wenn der Controller in Frage lautete: „qwewqewqeqweq“, die hoffentlich unwahrscheinlich ist. Ich sagte, es ist schrecklich.

Andere Tipps

Sie können den Namen der Route mit dem RouteLink Helfer angeben:

<%: Html.RouteLink("link text", "Default", 
    new { action = "add", controller = "home" }) %>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top