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?


Postado na(s) categoria(s) ASP.Net Routing pelo giovanni bassi em 20 de julho de 2008 às 23:50 | Tags: ,
404 error

Se você leu meus artigos sobre Routing com web forms, ou simplesmente está testando o Routing ou ASP.Net MVC, e resolveu fazer o deploy para o IIS, descobriu que lá a história é outra quando recebe um belo erro 404.

Pois bem, é isso mesmo. O IIS 6 não sabe o que fazer com um request http://localhost/app/controlador/acao/id. Ele vai procurar o diretório, e não vai encontrar. Resultado: erro 404.

Algumas opções:

  1. Mapear todos os requests para o filtro ISAPI do ASP.Net. Vai funcionar, mas aí até mesmo imagens e arquivos javascript, html e css vão ser servidos pelo ASP.Net, o que causa um overhead razoável.
  2. Utilizar rotas que possuem extensão, como http://localhost/app/controlador.ASPX/acao/id, ou http://localhost/app/controlador.MVC/acao/id. No segundo caso, você também vai ter que mapear .MVC para a extensão ISAPI do .Net.
  3. Reescrever a URL. Isso é um hack mesmo, e apesar de funcionar, acho que é demais para um problema tão simples. Você acaba reescrevendo para o IIS requests sem extensão por um filtro ISAPI de terceiros, e depois desfaz a rescrita no ASP.Net. De qualquer forma, se você precisar ir a produção, talvez seja a melhor opção.

Mais informações sobre como fazer essas configurações no blog do Steve Sanderson.

Como as opções são como usar Routing com IIS 6, não coloquei acima a melhor de todas: Migrar para Windows Server 2008 e IIS 7. É mais rápido, mais escalável, mais fácil de administrar, mais plugável, mais extensível, etc, etc, etc. Se você é desenvolvedor, o Windows Vista já vem com o IIS 7.


Postado na(s) categoria(s) ASP.Net MVC , ASP.Net Routing pelo Giovanni Bassi em 14 de julho de 2008 às 01:42 | Tags: ,

Quem é Giovanni Bassi

Giovanni Bassi Sou uma pessoa apaixonada por tecnologia e especificamente por .Net. Sou consultor independente especialista em .Net, focado em arquitetura e melhores práticas. Tenho dezenas de artigos publicados na .Net Magazine, revista da qual sou editor técnico. Ministro palestras e cursos de vez em quando, e quando dá tempo eu respiro um pouco. Mais detalhes nesta página.

Busca

Selos

MVP

MCPD

MCSD

.Net Magazine

Abaixo ao if!

Calendário

«  março 2010  »
seteququsedo
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234
Ver detalhamento de posts no calendário

Blogs interessantes

    OPMLDownload OPML file

    Postagens recentes

    Comentários recentes

    Disclaimer / Aviso
    As opiniões colocadas neste blog são minhas e pessoais e não expressam necessariamente as opiniões de meus empregadores, pareceiros e amigos. Da mesma forma, os comentários feitos por leitores do blog não expressam a minha opinião.

    © Copyright 2010 .Net Unplugged
    Log in