Os parâmetros são suportados diretamente no MVC simplesmente adicionando parâmetros aos seus métodos de ação. Dada uma ação como a seguinte:
public ActionResult GetImages(string artistName, string apiKey)
O MVC preencherá automaticamente os parâmetros quando receber um URL como:
/Artist/GetImages/?artistName=cher&apiKey=XXX
Um caso especial adicional são os parâmetros denominados "id". Qualquer parâmetro chamado ID pode ser colocado no caminho, e não na string de consulta, algo como:
public ActionResult GetImages(string id, string apiKey)
seria preenchido corretamente com um URL como o seguinte:
/Artist/GetImages/cher?apiKey=XXX
Além disso, se você tiver cenários mais complicados, poderá personalizar as regras de roteamento que o MVC usa para localizar uma ação. Seu arquivo global.asax contém regras de roteamento que podem ser personalizadas. Por padrão, a regra fica assim:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
Se você quisesse suportar um URL como
/Artist/GetImages/cher/api-key
você pode adicionar uma rota como:
routes.MapRoute(
"ArtistImages", // Route name
"{controller}/{action}/{artistName}/{apikey}", // URL with parameters
new { controller = "Home", action = "Index", artistName = "", apikey = "" } // Parameter defaults
);
e um método como o primeiro exemplo acima.
A partir do MVC 5, você também pode usar o roteamento de atributos para mover a configuração de parâmetros de URL para seus controladores.
Uma discussão detalhada está disponível aqui: http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx
Resumo:
Primeiro você habilita o roteamento de atributo
Em seguida, você pode usar atributos para definir parâmetros e, opcionalmente, tipos de dados
fonte
Você pode passar parâmetros arbitrários pela cadeia de consulta, mas também pode configurar rotas personalizadas para lidar com isso de uma maneira RESTful:
Isso pode ser:
Portanto, se alguém usou a seguinte rota:
Os levaria para o mesmo lugar que a sua querystring de exemplo.
O exemplo acima é apenas um exemplo e não aplica as regras e restrições de negócios que você precisaria configurar para garantir que as pessoas não 'invadissem' o URL.
fonte