ASP.NET Routing: Wie routeConfig mit einer dynamischeren URL-Struktur umgehen kann
Mein Szenario sieht folgendermaßen aus: Ein Veranstaltungsort kann Teil mehrerer Kategorien sein, und Benutzer können auch Filter für mehrere Kategorietypen hinzufügen. Meine URLs sehen also jetzt folgendermaßen aus:
/venues/beaches/boats/themeparks
(Hier werden alle Orte angezeigt, die Strände UND Boote UND Themenparks sind.)/venues/beaches/boats
/venues
etcDie Anzahl der verschiedenen Veranstaltungsorte (Strände, Boote, Themenparks usw.) ist dynamisch UND optional. Ich habe mich für URLRouting entschieden, damit ich die verschiedenen Werte in codebehind über @ abrufen kanRequest.GetFriendlyUrlSegments()
Ich installiertehttps: //www.nuget.org/packages/Microsoft.AspNet.FriendlyUrls.Core und manuell ein @ erstelRouteConfig.vb
Datei inApp_Start
Mappe. Diese Datei enthält:
Public NotInheritable Class RouteConfig
Private Sub New()
End Sub
Public Shared Sub RegisterRoutes(routes As RouteCollection)
Dim settings = New FriendlyUrlSettings()
settings.AutoRedirectMode = RedirectMode.Permanent
routes.EnableFriendlyUrls(settings)
routes.MapPageRoute("", "venues", "~/venues.aspx")
End Sub
End Class
Und inglobal.aspx.vb
Ich fügte hinzu
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
RouteConfig.RegisterRoutes(RouteTable.Routes)
End Sub
Ich habe ALLE Umschreiberegeln aus meiner Anwendung entfernt, daher keine Regeln inweb.config
oderrewriteRules.config
. Wenn ich zur URL gehe:www.example.com/venues
, es leitet mich korrekt zu venues.aspx weiter. Aber diese URL:www.example.com/venues/boats/outside/castles/barns/restaurants
, wirft einen 404-Fehler:
Ich habe auch @ gechecHie und versuchte das, so dass die http-Umleitung unter Windows aktiviert und die Datei web.config geändert wurde:
web.config
<!-- tried setting mode to On/Off/Custom -->
<customErrors mode="Off" defaultRedirect="/error/1" redirectMode="ResponseRedirect">
<error statusCode="404" redirect="/404.aspx" />
</customErrors>
<modules runAllManagedModulesForAllRequests="true">
<add type="aspnetforum.ForumSEOHttpModule, aspnetforum" name="ForumSEOHttpModule" />
<remove name="UrlRoutingModule"/>
<add name="UrlRoutingModule"
type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</modules>
<handlers>
<remove name="PHP55_via_FastCGI" />
<remove name="PHP53_via_FastCGI" />
<add name="ScriptCombiner" verb="POST,GET" path="ScriptCombiner.axd" preCondition="integratedMode" type="ScriptCombiner, App_Code" />
<add name="UrlRoutingHandler"
preCondition="integratedMode"
verb="*"
path="UrlRouting.axd"
type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</handlers>
Ich habe festgestellt, dass, wenn ich die Routen in @ explizit definieRouteConfig.vb
, es funktioniert so:
routes.MapPageRoute("", "venues", "~/venues.aspx")
routes.MapPageRoute("", "venues/boats/outside/castles/barns/restaurants", "~/venues.aspx")
So jetzt URL/venues
und/venues/boats/outside/castles/barns/restaurants
work, aber das ist überhaupt nicht dynamisch. Da es viele Veranstaltungsortkategorien und -kombinationen gibt, möchte ich nicht alle diese Kombinationen manuell hinzufügen. Ich möchte nur auf alle URLs passen, die mit @ beginn/venues
und dann Methode @ verwendRequest.GetFriendlyUrlSegments
imvenues.aspx.vb
, um die Veranstaltungsortkategorien abzurufen.
Wie kann ich das machen