Compartilhar via


ASP.NET MVC - Validando os parâmetros na requisição de uma URL (pt-BR)

Sabemos que em toda requisição para uma Action os parâmetros sempre são enviados juntos através da URL. Não seria ótimo poder validar estes parâmetros para não permitir que informações inválidas ou fora de padrão cheguem as nossas Actions?

Considerando a seguinte URL em MVC http://localhost:9040/Home/ValidandoOsParametros se formos enviar o id como parâmetro ficaria assim http://localhost:9040/Home/ValidandoOsParametros/4 podemos ver que o id é numérico, logo não podemos realizar a seguinte requisição http://localhost:9040/Home/ValidandoOsParametros/abc.  Para tanto o ASP.NET MVC fornece um mecanismo para validação pelo qual podemos validar a URL analisando se os dados são válidos.

Observe a seguinte ação em HomeController:

public class HomeController : Controller{   public ActionResult ValidandoOsParametros(int id)   {      return View();   }}

Até aqui tudo extremamente simples e normal, agora vamos definir a validação na criação da Rota, para tal validação iremos utilizar Regex (Regular Expressions).

Está validação será aplicada utilizando a 4ª sobrecarga da extensão routes.MapRoute, isso claro se você estiver definindo suas Rotas pelo arquivo Global.asax, segue abaixo imagem demonstrativa:

 

http://rafaelzaccanini.files.wordpress.com/2011/08/img11.jpg

Caso você não possua muita familiaridade com Expressões Regulares, aqui tem um ótimo vídeo explicativo (em inglês).

Para realizarmos a validação numérica vamos utilizar a seguinte regex "d{1,2}", isto significa que o parâmetro deve ser numérico e deve possuir no máximo dois dígitos, ou seja, deve ser entre 0 e 99. Defini também que o valor padrão para o parâmetro é 0. Veja abaixo como fica a definição de nossa rota completa:

routes.MapRoute(  "Default",  "{controller}/{action}/{id}",  new { controller = "Home", action = "ValidandoOsParametros", id = 0 },  new { id = @"d{1,2}" });

 

Agora é só testar, observe que passando o id válido a página carrega normalmente, porém quando passamos parâmetros inválidos é apresentado erro:

 

http://rafaelzaccanini.files.wordpress.com/2011/08/img21.jpg

 

http://rafaelzaccanini.files.wordpress.com/2011/08/img3.jpg

 

http://rafaelzaccanini.files.wordpress.com/2011/08/img4.jpg

O mais interessante é que estas validações são realizadas ANTES da requisição chegar até o Controller. 

Rafael Zaccanini
MTAC – Microsoft Technical Audience Contributor
Blog: http://www.rafaelzaccanini.net

**Twitter: **@rafaelzaccanini
Facebook: http://www.facebook.com/RafaelZaccaniniNet