2010-09-01 3 views
10

Ich versuche, so etwas wie StackoverflowASP.NET MVC Routing/SEO Friendly URL

Nehmen Sie einen Link von Stackoverflow zum Beispiel zu tun:

Hidden Features of C#?

, wenn Sie den letzten Teil entfernen (Hidden Features of C#?) es gibt immer noch das gleiche Ergebnis zurück.

Für meinen Routing in Global.asax Ich habe versucht, so etwas wie tun "{Aktion}/{id}/{title}"

Auf meiner Seite, das ist mein Link:

<%= Html.ActionLink(video.Title, "Details", "Videos", new {id = video.ID, title = video.Title.Replace(" ", "-")}, null) %> 

das tut, was ich will, außer dass in den meisten Fällen zu tun, nachdem die ID wirft es in „? title = bla-bla-bla

ich möchte sagen, "id/bla-bla-bla "

Was ist mein Problem? (Abgesehen davon, dass es ein Noob ist)

+0

Können Sie alle Routen in Ihrer global.asax.cs veröffentlichen? Vielleicht wird eine andere zuerst abgestimmt ... – Peter

+0

@Peter in der Tat war das der Fall –

+1

+1 für "Was ist mein Problem? (Neben einem Noob sein)" – Jake

Antwort

4

Diese Route sieht aus wie es mit diesem Aufruf von ActionLink funktionieren sollte, so ist dies ein wenig raten. Registrieren Sie Ihre Route "{action}/{id}/{title}" nach der Standardroute? Wenn dies der Fall ist, wird die Standardroute zuerst übereinstimmen und den Titelwert einfach in den Querystring setzen, da er nicht im Pfad erscheint. Wenn Sie Ihre benutzerdefinierte Route vor der Standardeinstellung {controller}/{aktion}/{id} registrieren, sollte sie funktionieren.

+0

Es ist vor der Standard-Route registriert, aber Sie haben mich darauf hingewiesen die richtige Richtung. Es ging tatsächlich um die tatsächliche Reihenfolge der registrierten Routen. danke –

9

Ich schrieb einen Blog-Post auf diesem eine Weile zurück und dachte, es könnte hilfreich sein:

http://mynameiscoffey.com/2010/12/19/seo-friendly-urls-in-asp-net-mvc/

Grundsätzlich müssen Sie auf das Vorhandensein der richtigen SEO-freundliche Titel in Ihrer Aktion überprüfen, wenn Ihre Aktion führt aus, und wenn es nicht gefunden wird, eine Umleitung zurück an den Browser auf die richtige SEO-Friendly URL.

+0

+1 sehr schöne Blogpost, sehr hilfreich! –

+0

Toller Beitrag. Darf ich vorschlagen, '.Trim ('-')' am Ende Ihrer 'SeoName'-Methode zu setzen, um Dinge wie "Eins (Zwei)" zu "Eins-Zwei" zu machen. –

+0

perfekt! speziell für mich migrieren von webform zu mvc. –