2011-01-03 5 views
0

ich habe ziemlich große ASP.NET MVC 2 Anwendung (mehrere Bereiche, die jeweils mit eigenen Routing-Registrierung) mit Routen wie folgt aus:ASP.NET MVC - add/umschreiben Datenweg global

/Item/12345/Detail - Wobei 12345 die ID des Artikels ist. Die ganze Anwendung verlässt sich nur auf diese numerischen IDs. Aber jetzt gibt es eine Anforderung (SEO Zeug) URLs wie folgt aussehen zu machen:

/Item/Artikel-unique-string-name/Detail-

würde ich lieben, diese in einem gewissen hohen Niveau global zu handhaben - für Beispiel: Laden Sie die numerische ID vor der Routenauswertung und "ersetzen" Sie sie in den Routendaten. Aber ich bin mir nicht sicher, was ist der richtige Ort für einen solchen Hack - benutzerdefinierte MvcHandler, benutzerdefinierte IRouteHandler, woanders? irgendwelche Ideen dazu? :)

Antwort

2

Hey, ich es schließlich von mir herausgefunden, alles, was ich tun musste, war überschreiben Methode meiner Base wie folgt auszuführen:

protected override void Execute(System.Web.Routing.RequestContext requestContext) 
    { 
     if (requestContext.RouteData.Values["seo"] != null && requestContext.RouteData.Values["id"] == null) 
     { 
      // retrieve Id from Seo here (i use cache for that) 

      if (Id != null) 
      { 
       requestContext.RouteData.Values.Add("Id", (long)Id); 
      } 
      else 
      { 
       requestContext.RouteData.Values.Add("Id", 0); 
      } 
     } 

     base.Execute(requestContext); 
    } 

Also kein Hacking von Routing, nachdem alle :) erforderlich