ASP .NET - MVC Music Store - Definindo os Controladores


Na estruturas da web tradicional, as URLs de entrada são normalmente mapeadas para arquivos no disco. Por exemplo: um pedido de uma URL como "/Produtos.aspx" ou "/produtos.php" pode ser processado por um arquivo "Produtos.aspx" ou "produtos.php".

Os frameworks Web baseados no padrão MVC mapeiam as URLs para o código do servidor de uma forma ligeiramente diferente. Em vez de mapear as URLs de entrada para os arquivos, eles mapeiam as URLs para métodos de classes.

Essas classes são chamadas de "Controllers" (Controladores) e são responsáveis pelo processamento de pedidos HTTP de entrada, a manipulação da entrada do usuário, a recuperação e a persistência dos dados e definição da resposta para enviar de volta ao cliente (exibição HTML, fazer download de um arquivo, redirecionar para uma URL diferente, etc.)

Para mais detalhes veja o meu artigo: Compreendendo Models, Views e Controllers - MVC - Macoratti.net

Incluindo um HomeController ao nosso projeto

Vamos começar nossa aplicação MVC Loja de Música adicionando uma classe controller que irá lidar com URLs para a página inicial de nosso site. Nós vamos seguir o padrão de convenções da nomenclatura de ASP.NET MVC chamando-o de HomeController.(A convenção determina que o nome é composto do NomeDoControlador+Controller)

Clique com o botão direito do mouse sobre a pasta Controllers e selecione Add -> Controller;

Será aberta a janela Add Controller exibindo o nome padrão Default1Controller;

Altere o nome para HomeController e clique no botão Add;

Será criado o arquivo HomeController.vb na pasta /Controllers com o seguinte código:

Para iniciar de forma bem simples, vamos substituir o método Index com um método que retorna apenas uma string. Nós vamos fazer duas alterações:

  Function Index() As String
        Return "Olá, Macoratti"
  End Function

Após isso vamos rodar a aplicação clicando no menu Debug e em Start Debugging ou pressionando F5;

Outra opção é clicar na seta verde selecionando o navegador para exibir a aplicação;

Qualquer uma das opções acima irá compilar nosso projeto, e fazer com que o servidor de desenvolvimento ASP.NET que é embutido no Visual Studio/Visual Web Developer seja iniciado. Uma notificação aparecerá no canto inferior da tela para indicar que o servidor de desenvolvimento ASP.NET já iniciou, e vai mostrar o número da porta que está em execução.(O número da porta é aleatório)

Abaixo vemos o resultado obtido:

Incluindo um StoreController na aplicação

Vamos agora adicionar um outro controlador que vamos usar para implementar a funcionalidade de navegação de nossa loja de música. Nosso controlador de loja vai dar suporte a três cenários:

Vamos começar adicionando uma nova classe StoreController. Pare a aplicação selecionando o item do menu Debug -> Stop Debugging;

Agora adicione um novo StoreController da mesma forma que fizemos para incluir o HomeController, clique com o botão direito sobre a pasta "Controllers" e escolha Add-> Controller;

A seguir informe o nome StoreController e clique no botão Add;

Nosso controlador StoreController já tem um método "Index". Vamos usar esse método para implementar a nossa página de listagem que lista todos os gêneros em nossa loja de música. Vamos também adicionar dois métodos adicionais para implementar os dois cenários que queremos tratar: Procurar e Detalhes.

Esses métodos (Index, Procurar e Detalhes) dentro de nosso controlador são chamados de "Controller Actions". O método Action Index() tem como objetivo responder às solicitações da URL e (em geral) determinar qual conteúdo deve ser enviado de volta para o navegador ou ao usuário que invocou a URL.

Vamos começar a nossa implementação de StoreController alterando o método Index() para retornar a string "Olá da Store.Index()" e vamos adicionar métodos semelhantes para as Actions Procurar() e Detalhes():

Execute a aplicação novamente e navegue pelas seguintes URLs:

  1. /Store
  2. /Store/Procurar
  3. /Store/Detalhes

O acesso a estas URLs irá chamar os métodos Action dentro de nosso Controller retornando as strings de respostas:

Vamos alterar o método Action Procurar() para recuperar um valor querystring da URL. Podemos fazer isso adicionando um parâmetro "genero" ao nosso método Action. Quando fazemos isso a ASP.NET MVC automaticamente passará qualquer querystring ou parâmetros de postagem de formulário chamado "genero" para o nosso método Action quando ele for chamado.

        ' GET: /Store/Procurar
        Public Function Procurar(genero As String) As String
            Dim mensagem As String = HttpUtility.HtmlEncode("Store.Procurar, Genero = " & genero)
            Return mensagem
        End Function

Estamos usando o método utilitário HttpUtility.HtmlEncode para filtrar e limpar a entrada do usuário. Isso impede que os usuários injetem código Javascript em nossa View com um link como : /Store/Procurar?Genero=window.location<script> ='http://hackersite.com'</script>.

Para testar vamos iniciar a aplicação e navegar para : /Store/Procurar?Genero=Disco

Vamos agora alterar a Action Detalhes para ler e exibir um parâmetro de entrada chamado ID. Ao contrário do nosso método anterior, não vamos incorporar o valor do ID como parâmetro querystring. Em vez disso, vamos incorporá-lo diretamente na própria URL. Por exemplo:/Store/Detalhes/5.

A ASP.NET MVC nos permite fazer isso facilmente, sem ter que configurar nada. A convenção de roteamento padrão da ASP.NET MVC trata o segmento de uma URL após o nome do método Action como um parâmetro denominado "ID". Se o seu método Action tem um parâmetro chamado ID, então a ASP.NET MVC automaticamente passará o segmento de URL para você como um parâmetro.

       ' GET: /Store/Detalhes
        Public Function Detalhes(id As Integer) As String
            Dim mensagem As String = "Store.Detalhes, ID = " & id
            Return mensagem
        End Function

Para testar vamos iniciar a aplicação e navegar para : /Store/Detalhes/5

Vamos recapitular o que fizemos até agora:

No próximo tutorial vamos incluir as Views em nosso projeto: ASP .NET - MVC Music Store - Views e ViewsModels

Referências:


José Carlos Macoratti