Roteamento ASP.NET: Como fazer o routeConfig manipular uma estrutura de URL mais dinâmica

Meu cenário é o seguinte: um local de eventos pode fazer parte de várias categorias e os usuários também podem adicionar filtros em vários tipos de categorias. Portanto, meus URLs agora são como:

/venues/beaches/boats/themeparks (isso exibirá todos os locais que são praias, barcos e parques temáticos)/venues/beaches/boats/venues etc.

Portanto, o número de diferentes tipos de locais (praias, barcos, parques temáticos etc.) é dinâmico e opcional. Decidi usar o URLRouting para começar a obter os diferentes valores no código por meio deRequest.GetFriendlyUrlSegments()

Eu instaleihttps://www.nuget.org/packages/Microsoft.AspNet.FriendlyUrls.Core/ e criou manualmente umRouteConfig.vb arquivo emApp_Start pasta. Este arquivo contém:

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

E emglobal.aspx.vb Eu adicionei:

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    RouteConfig.RegisterRoutes(RouteTable.Routes)
End Sub

Eu removi TODAS as regras de reescrita do meu aplicativo, portanto, nenhuma regra emweb.config ourewriteRules.config. Quando vou ao URL:www.example.com/venues, ele me redireciona corretamente para venues.aspx. Mas este URL:www.example.com/venues/boats/outside/castles/barns/restaurants, lança um erro 404:

Eu também verifiqueiaqui e tentei isso, habilitando o redirecionamento http no Windows e alterando o web.config:

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>

Descobri que quando defino explicitamente as rotas emRouteConfig.vb, funciona, assim:

routes.MapPageRoute("", "venues", "~/venues.aspx")
routes.MapPageRoute("", "venues/boats/outside/castles/barns/restaurants", "~/venues.aspx")

Agora URL/venues e/venues/boats/outside/castles/barns/restaurants trabalho, mas isso não é dinâmico. Como existem muitas categorias e combinações de locais, não quero adicionar todas essas combinações manualmente. Eu só quero corresponder em todos os URLs que começam com/venues e depois use o métodoRequest.GetFriendlyUrlSegments novenues.aspx.vb para obter as categorias do local.

Como posso fazer isso?

questionAnswers(1)

yourAnswerToTheQuestion