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 etc

Die 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/restaurantswork, 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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage