No post anterior vimos o conceito de rotas e como criar novas rotas de forma customizável. Mas, e se um usuário ou algum usário malicioso tentar burlar a minha URL definida na minha rota? Para isso temos o que chamamos de Constraint, ou seja, Regras que são definidas por meio de expressões regulares, com a finalidade de filtrar o que está sendo informado na URL de chamada ao seu site.

Expressões Regulares

Como uma explicação rápida, trata-se de uma cadeia de string a qual te a finalidade de definir um padrão para a String que será submetida validação.

Route Constraint

São regras que definimos por meio de expressões regulares, no momento em que estivermos customizando nossas rotas no arquivo Global.asax.

Criando uma Regra (Constraint) para uma Rota

Utilizando o nosso exemplo dopostanterior vamos criar uma validação, ou seja, criar uma Route Constraint para mais uma rota que iremos criar e customizar; o código abaixo mostra como fazer isso:

routes.MapRoute( "RouteConstraint", // Route name "RouteConstraint/{id}", // URL with parameters new { controller = "RouteConstraint", action = "Index" }, // Parameter defaults new { id = @"d+" } );

Vou assumir que você já conheça os demais parâmetros e vou dar foco apenas no último parâmetro. Esse parâmetro trata-se de um objeto dynamic e estamos criando, por meio do comando new {…} objetos anônimos o primeiro new define o nome da classe Controller e a action e o segundo objeto anônimo new cria justamente o Route Constraint, utilizando expressão regular para validar o parâmetro id.

A imagem abaixo mostra como seria o tratamento do sistema ASP.NET MVC sem o Route Constraint:

A imagem acima informa que o valor ‘apple’ do parâmetro, informado na URL não pode ser convertido num inteiro e o nosso parâmetro **id **não pode ficar sem valor, pois não é um Nullable. E a mensagem dá uma sugestão de que o parâmetro seja opcional, ou seja, Nullable 🙂

Agora a página de erro, sendo que utilizando o Route Constraint, mostrando o erro 404 Resource Not Found, informando que não conseguiu encontrar nenhuma informação com a URL informada:

Código Fonte

Até a próxima!