Um assunto que mencionei em posts anteriores foi o URL Routing usando um HttpModule para criar Url´s Amigáveis. Felizmente para todos aqueles que estão trabalhando com isso, eu já apanhei bastante desta técnica e por isso gostaria de compartilhar a solução de um problema relativamente comum relacionado a este tema. Durante as primeiras publicações que fiz do meu aplicativo web usando os recursos de URL Routing tudo deu certo, mas em um determinado servidor me deparei com um erro muito estranho disparado pelo IHttpHandler que não é possível capturar e tratar, e em função disso uma exceção de “Null Reference Exception” é lançada na tela.

Em suma o erro acontece quando o IHttpHandler tenta buscar no RequestContext a tabela de rotas registradas no Global.asax. No código abaixo na linha de número 11, podemos ver um foreach no objeto “requestContext.RouteData.Values” que é exatamente o objeto Null que causa a exceção.

//
// Classe do Handler que trata as URL´s
//
public class RouteHandler:IRouteHandler
{
    //
    // Método que registra as URL´s
    //
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        foreach (var value in requestContext.RouteData.Values)
        {
            // implementações
        }
        return (Page) BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page));
    }
}

No meu caso, após uma análise notamos que havia uma diferença entre as versões de uma dll que faz parte das dependências do projeto. Bastou trocar a referência no projeto e recompilar o projeto e o problema foi resolvido. Infelizmente, isto não significa que sabemos exatamente o que causou o problema, pois mesmo a versão antiga da dll funcionou em muitos servidores. O que podemos afirmar é que a versão mais nova da System.Web.Routing funcionou em todos os servidores que testei. Então fica mais esta dica.]

Use a versão: 3.5.30729.1


Ao invés desta: 3.5.30212.0


Abraços e sucesso a todos!