Dynamische url-Routen ASP MVC
Im Versuch, um eine sehr einfache Anwendung, mit der meine Kunden erstellen Ihre eigenen Seiten.
Der schwierige Teil ist, lassen Sie Sie erstellen Ihre eigenen URL.
Kunde ausfüllen muss:
- Name der Seite (BSP. Über uns).
- Seite Beschreibung (ex. Wir sind ein großes Unternehmen).
- URL der Seite relativ (ex. /Über)
Wenn der client diese Informationen eingeben und speichern, sollte es in der Datenbank gespeichert.
Kann ich leicht erstellen Sie einen Domänencontroller mit dem Namen "Seite" nimmt den Wert "ID": wenn ein Benutzer "www.someurl.com/Page/1" die neu erstellte Seite erscheint.
Aber was ich wirklich will, ist für den Benutzer zu schreiben "www.someurl.com/About" und dann die Seite öffnet sich.
Wie kann dies gemacht werden mit irgendeiner Art von dynamischer rewrite/route-code, ASP-MVC.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Meine Idee wäre ein Feld in Ihrer 'Seite' Tabelle namens 'Slug.' Wenn Ihre Benutzer eine neue Seite erstellt, die Sie hätten ausfüllen der 'Slug' - Feld und geben Sie, was Sie möchten, um zu sehen, in der url (zB: eine Seite wollte - "Über", "slug" - "über" | Seite wollte - "Sehen Sie Unsere Sponsoren", "slug" - "sehen-unsere-Sponsoren" | etc). Sie können diesen Vorgang automatisieren, mit ein bisschen javascript, wenn Sie wollen.
Erstellen Sie eine route in etwa so:
Erstellen Sie eine action-Methode wie folgt:
Grundsätzlich funktionieren würde, wie Ihre Idee, setzen die Seiten-id in der url, aber es wäre viel sauberer und es verwenden würde, 'slug' zu tun, die Datenbank-lookup statt der Seiten-id.
{*slug}
so dass es nimmt alles. Es funktioniert perfekt, danke Euch allen!Als die Anzahl der Fragen, über die routing-auf dieser Website gibt an, die Handhabung mehrerer, möglicherweise überlappende Routen, richtig schwierig ist auch für den Programmierer. Putting diese Art von Breite reichende Funktionalität in die Hände der Endnutzer ist erschreckend.
Ihre Frage zu beantworten, es ist ziemlich einfach zu Lesen, die "custom" - Routen aus der Datenbank beim Start der Anwendung, und ordnen Sie Sie wie gewohnt. Sie in der Regel nicht tun Sie dies während der Ausführung der Anwendung, wie die route-Liste weitergegeben werden unter mehrere threads. Wenn Sie Graben sich in die routing-source-code, werden Sie wahrscheinlich einen Weg finden, zu schützen, einen "rebuild" der routing-Tabelle, wenn Sie feststellen, dass Sie es tun müssen, während der Ausführung.
Allerdings würde ich stark vorschlagen, dass Sie gehen mit Ihrem "Site" controller-Idee statt. Betrachten Sie das folgende: - Routing wird verwendet, sowohl für die Analyse eingehenden URIs und für die Generierung von URIs. Wenn es gibt sogar einen Fall in Ihrer Anwendung, wo Sie
ActionLink
stattRouteLink
, dann Bedenken Sie, dass eine route Hinzugefügt, die von einem Benutzer potenziell brechen Sie Ihre gesamte Website. Das heißt, der Benutzer wäre nicht in der Lage, zu beheben Ihre Fehler, auch wenn Sie erkannten, dass Sie ihn verursacht hatte.Beste Idee, die ich im Sinn haben, wäre die Nutzung der "letzten Fall" - Idee.
Grundsätzlich haben Sie dieses Szenario.
1 - normal routing (z.B.: controller/action/id-route).
2 - Besondere route/Gegend, die Sie einstellen können (z.B.: admin)
3 - schreiben Sie eine catchall route. Diese route wird die Suche in der db für eine Seite mit dem Namen der route. Wenn diese route nicht existiert, wird es werfen ein 404 Fehler Seite nicht gefunden.
Dies ist, wie der endgültige code sieht folgendermaßen aus, vielen Dank an alle die geholfen haben!
Diese kann getan werden, indem folgende Weise:
1.Legen Sie neue route für diese Seite in der RouteTable
Diese lösen Routen für die neu erstellte Seite zur Laufzeit, sondern dies muss in der Datenbank gespeichert.