ASP.NET MVC Routing - / SEO-Freundliche URL -
Ich versuche zu tun, so etwas wie stackoverflow
Nehmen Sie einen link von stackoverflow zum Beispiel:
wenn Sie entfernen Sie den letzten Teil
(Versteckte Features von C#?)
noch liefert das gleiche Ergebnis.
Für mein routing im Global.asax ich habe versucht zu tun, so etwas wie
"{action}/{id}/{title}"
Auf meiner Seite, dies ist mein link:
<%= Html.ActionLink(video.Title, "Details", "Videos", new {id = video.ID, title = video.Title.Replace(" ", "-")}, null) %>
Das tut, was ich will, es zu tun, für die meisten Teil, außer dass nach der id, die es wirft in "?title=blah-blah-blah"
Ich will es sagen "id/blah-blah-blah"
Was ist mein problem? (Abgesehen davon, dass ein noob)
- Könnte Sie buchen alle Routen in der globalen.asax.cs? Vielleicht ein anderes wird zuerst abgestimmt ...
- das war ja auch der Fall
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Strecke aussieht, sollte es mit rufen, um ActionLink, so ist dies ein bisschen eine Vermutung. Sind Sie der Registrierung Ihrer
{action}/{id}/{title}
route nach die default-route? Wenn dem so ist, wird die default-route entspricht der ersten, und nur die Titel Wert im querystring, da es nicht in dem Pfad. Registrieren Sie Ihre route vor der{controller}/{action}/{id}
Standard, sollte es funktionieren.Schrieb ich einen blog-Beitrag über dieses eine Weile zurück und dachte, es könnte hilfreich sein:
http://web.archive.org/web/20170416234816/http://mynameiscoffey.com/2010/12/19/seo-friendly-urls-in-asp-net-mvc/
Grundsätzlich müssen Sie prüfen, in Ihrem handeln für die Gegenwart die richtige SEO-Freundliche Titel, wenn Sie Ihre Aktion ausgeführt, und wenn Sie nicht finden, einen redirect an den browser zurück auf die richtige SEO-Freundliche URL.
.Trim('-')
am Ende IhrerSeoName
Methode, um zu stoppen Dinge wie "Ein (Zwei)" immer "eins-zwei-".SeoName(string name)
scheitert die Arbeit mit unicode-Zeichenfolgen wie درباره ما ist ohne ausdrückliche urlencoding. dh.HttpContext.Current.Server.UrlEncode(Regex.Replace(input.ToLower().Replace(@"'", String.Empty), @"[^\w]+", "-"));
Ich weiß nicht den Grund. ohne Codierung, es wirft 404 Ausnahme.