2017-06-17 5 views
0

Ich habe ein bisschen ProblemASP.NET MVC benutzerdefinierte Routing mit Standardroute

Ich habe eine MVC-Site, die gut funktioniert.

Ich wollte SEO freundliche URLs haben, so dass ich benutzerdefiniertes Routing erstellt, die

{section}/{group}/{manufacturer} 

so aussieht, da es die gleiche Anzahl von Feldern als Standardroute

{controller}/{action}/{id} 

i in der Schleife erstellt hat in RouteConfig.cs, die zu Datenbank und Schleifen Abschnitte Tabelle und erstellt benutzerdefinierte Routen wie

und zeigen Sie es auf den Abschnitt Controller.

Es funktioniert gut. Das Problem, das ich habe, ist, dass ich FOOD zu FRESH-FOOD umbenennen muss, und ich will alte Verbindungen zu FOOD arbeiten lassen.

Was würden Sie empfehlen? Wie kann ich das lösen?

Gibt es eine bessere Möglichkeit, Route statt benutzerdefinierte Routen zu tun?

Antwort

0

Das klingt vielleicht gut für einen benutzerdefinierten Routen-Handler. Im ProcessRequest Methode unten können Sie für Controller Namen „FOOD“ überprüfen und Umleitung zu „frische Lebensmittel“ wie folgt aus:

public class CustomRouteHandler : IRouteHandler 
    { 
     public IHttpHandler GetHttpHandler(RequestContext requestContext) 
     { 
      return new CustomHttpHandler(); 
     } 
    } 

    public class CustomHttpHandler : IHttpHandler 
    { 
     public bool IsReusable 
     { 
      get 
      { 
       return true; 
      } 
     } 

     public void ProcessRequest(HttpContext context) 
     { 
      var routeValues = context.Request.RequestContext.RouteData.Values; 
      var controllerName = context.Request.RequestContext.RouteData.GetRequiredString("controller"); 
      if (controllerName.ToLower() == "food") controllerName = "FRESH-FOOD"; 
      var controller = ControllerBuilder.Current.GetControllerFactory(). 
      CreateController(context.Request.RequestContext, controllerName); 
      if (controller != null) 
      { 
       controller.Execute(context.Request.RequestContext); 
      } 
     } 
    } 

Wenn Sie Ihre eigene Routen verwenden, um die Route Konstruktor Überlastung erstellen, die eine IRouteHandler

nimmt