quinta-feira, 2 de outubro de 2014

Pontos em parâmetros no MVC - Problema com virtual directory

Tive um problema com meus parâmetros no MVC. Se você costuma mexer com MVC e já brincou com o routeConfig, sabe que pode mexer na Url como quiser. No meu caso, tudo que eu estava fazendo era passar uma string como parâmetro na url. E funcionava lindamente. Na minha máquina.

Subimos para o ambiente de homologação, tudo certo. Subimos para produção. O cliente pediu para subir temporariamente oculto por uma pasta. Fácil, virtual directory. Tudo funcionando, ótimo... Até aparecer um ponto entre as palavras que estavam como parâmetro. Foi lindo:

"The resource you are looking for has been removed, had its name changed, or is temporarily unavailable."

Muito bonito. Um 404. De uma página que existe. A diferença? O maldito ponto. E vai fazer busca por MVC dot parameter. Enfim, busquei e acabei encontrando uma solução para colocar no web.config: http://stackoverflow.com/questions/11048863/modules-runallmanagedmodulesforallrequests-true-meaning.

Logo abaixo, alguém pergunta sobre a vulnerabilidade da solução. Me deu insegurança. Ninguém respondeu. Mas, em um dos comentários, a pessoa cita outro post: http://stackoverflow.com/questions/20998816/dot-character-in-mvc-web-api-2-for-request-such-as-api-people-staff-45287

Apesar da solução aceita ser a mesma, logo abaixo alguém postou outra solução:

      <remove name="UrlRoutingModule-4.0" />
      <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />

Procurei apenas pelo trecho e achei lugares afirmando que seria mais segura, por ser menos aberta.

Fora isso, apenas uma coisa: para simular o erro com virtual directory não foi necessário ficar publicando diversas vezes. Apenas colocar o path a mais no routeConfig foi suficiente, o erro que aconteceu foi o mesmo.