Até agora não havia uma forma de configurar o ASP.Net Routing com o Web.config (ao menos que eu soubesse). Até agora, fazia-se assim:

Public Class GlobalApplication
    Inherits System.Web.HttpApplication

    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

         MapRoute takes the following parameters, in order:
         (1) Route name
         (2) URL with parameters
         (3) Parameter defaults
        routes.MapRoute( _
            "Default", _
            "{controller}/{action}/{id}", _
            New With {.controller = "Home", .action = "Index", .id = ""} _
        )

    End Sub

    Sub Application_Start()
        RegisterRoutes(RouteTable.Routes)
    End Sub
End Class

Então fiz algo aqui para ajudar. Criei um assembly para permitir a configuração. No web.config fica assim:

  <gb.aspnetrouting>
    <routing>

      <routes>
        <!--<route routeName="name of the route" 
           url="the url" 
           routeHandler="some 
           route handler" />-->
        <route routeName="DefaultMvc" 
           url="{controller}/{action}/{id}" 
           routeHandler="MvcRouteHandler">
          <defaults>
            <default name="action" value="index" 
               type="System.String, mscorlib"/>
            <default name="id" value="" 
               type="System.String, mscorlib"/>
          </defaults>
          <constraints>
            <constraint name="basic" 
               value="[^\.]*" 
               type="System.String, mscorlib"/>
          </constraints>
          <dataTokens>
            <dataToken name="someData" 
            value="I'm a data token" type="System.String, mscorlib"/>
          </dataTokens>
        </route>
      </routes>

      <ignoredRoutes>
        <ignoredRoute url="{resource}.axd/{*pathInfo}" />
      </ignoredRoutes>

      <routeHandlers>
        <routeHandler name="MvcRouteHandler" 
           type="System.Web.Mvc.MvcRouteHandler, System.Web.Mvc"/>
      </routeHandlers>

    </routing>
  </gb.aspnetrouting>

E no Global.asax, fica assim:

Public Class GlobalApplication
    Inherits System.Web.HttpApplication

    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)

        GB.RoutingConfig.RoutingConfiguration.Configure( _
           "~/web.config", routes)

    End Sub

    Sub Application_Start()
        RegisterRoutes(RouteTable.Routes)
    End Sub
End Class

 

No Global.asax existe apenas uma chamada ao método de configuração. Tirei a idéia do que já existe hoje no .Net Remoting, que possui chamada de configuração semelhante.

Já no web.config, você pode configurar as rotas, com Constraints, Defaults e DataTokens, o gerenciador de rota (que no MVC é sempre o MvcRouteHandler), e as rotas ignoradas. Até o time do MVC lançar o deles vou usar esse para ajudar. E parece que vai ser bem para frente, já que eles já disseram que vão focar em features, por enquanto.

Quem quiser baixar, pegue aqui a dll compilada, e aqui o código fonte. Fiquem à vontade para melhorar, e me dêem notícia se funcionou para vocês e se gostaram.

Já adianto que não é o assembly mais testado no mundo, então ele tem somente a seguinte garantia: “roda na minha máquina”. Espero que na de vocês também rode, e deve rodar, mas não garanto que está livre de bugs, já que foi mais um exercício do que a construção de um módulo, ok?

Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.