2009-05-26 3 views
3

Ich möchte eine ASP.NET MVC-Site erstellen, sodass der Controller für eine bestimmte URL in der Datenbank statt der URL gespeichert wird.URL-Routing mit Datenbanksuche?

Der Grund dafür ist, dass ich ein CMS-System erstellen und die Benutzer in der Lage sein sollten, die Vorlage (Controller) zu ändern, ohne die URL zu ändern. Ich denke auch, dass der Name des Controllers für die Endbenutzer nicht relevant ist und ich saubere URLs möchte.

Ich weiß, dass ich einfach alle Routen beim Start der Anwendung hinzufügen konnte, aber für ein System mit 100 000 Seiten fühlt es sich wie eine schlechte Idee an.

Ist es möglich, die URLs in der Datenbank zu speichern und eine Suche für jede Anfrage durchzuführen und diese Anfrage dann einem bestimmten Controller zuzuordnen?

Antwort

-1

Ich nehme an, ASP.NET kann viele der gleichen Dinge wie PHP tun. Wenn ja, gibt es einen einfachen Ansatz.

Mit Rewrite-Regeln können Sie einfach jeden Datenverkehr an jede URL der 100K an den gleichen Ort senden. An diesem Ziel können Sie einfach die Servervariablen verwenden, die die vom Client angeforderte URL enthalten, und den Standort extrahieren. Suchen Sie in der Datenbank nach und senden Sie die entsprechenden Daten für diese URL direkt an den Client zurück.

+0

Sie benötigen immer noch asp.net mvc URL-Routing für diese zu arbeiten – jfar

-1

"Für ein System mit 100.000 Seiten fühlt es sich wie eine schlechte Idee an."

Es ist eine schlechte Idee, wenn Sie ein Routing-System erstellen, das nicht wiederverwendet werden kann. Das grundlegende Schema {controller}/{action}/{id} weist Sie in die Richtung der Wiederverwendung. Dieses Schema kann nach Ihren Bedürfnissen erweitert/überarbeitet/neu erstellt werden.

Anstatt darüber nachzudenken, wie viele Seiten Sie darüber nachgedacht haben, wie Ihre Ressourcen gruppiert werden können.

Anstatt ein schweres Routing-System zu erstellen, warum nicht ein Anker-Link-Steuerelement (ascx) erstellen, die es dem Benutzer erlaubt, nur gültige interne Links hinzuzufügen. Behalten Sie eine Tabelle in der Datenbank Ihrer Vorlagen und ihrer Controller bei, um das Steuerelement damit zu füllen.

1

Warum konnten Sie nur so etwas tun:

- Global.asax.cs -

routes.MapRoute(null,    // Route name 
       "content/{id}", // URL with parameters    
       new { Controller = "Content", Action = "Show", Id = (string) null }); // Parameter defaults 

-/Controller/ContentController.cs -

public class ContentController : Controller 
{ 
    public ActionResult Show(string id) 
    { 
     // Lookup the 'content' (article, page, blog post, etc) in the repository (database, xml file, etc) 
     ContentRepository repository = new ContentRepository(); 
     Content content = repository.FindContent(id); 
     return View(content); 
    } 
} 

, so dass ein Antrag auf Ihre Website www.yoursite.com/content/welcome-to-my-first-blog-post nennen würde ContentController.Show ("welcome-to-my -erst-blog-post ").

+0

Technisch ist das eine gute Lösung, aber er/sie am Ende senden viele Anfragen durch diese eine Methode. Scheint wie ein Anti-Muster. – kjgilla