AGRADECIMENTOS... XIII PREFÁCIO... XV 0. INTRODUÇÃO... 1 0.1 O que posso encontrar neste livro... 1 0.2 Requisitos... 2 0.3 A quem se dirige este livro?... 2 0.4 Código e samples... 3 0.5 Convenções... 3 0.6 Organização do livro... 3 0.6.1 Capítulo 1: Introdução ao ASP.NET MVC... 4 0.6.2 Capítulo 2: Roteamento... 4 0.6.3 Capítulo 3: Controladores... 4 0.6.4 Capítulo 4: Vistas... 5 0.6.5 Capítulo 5: Métodos auxiliares... 5 0.6.6 Capítulo 6: Validação... 5 0.6.7 Capítulo 7: JavaScript e AJAX... 5 0.6.8 Capítulo 8: Segurança... 5 0.6.9 Capítulo 9: Outras funcionalidades... 6 0.7 Suporte... 6 1. INTRODUÇÃO AO ASP.NET MVC... 7 1.1 O padrão MVC... 7 1.2 O padrão MVC e a plataforma ASP.NET MVC... 8 1.3 A evolução da plataforma... 11 1.4 Instalação da plataforma... 14 1.5 Criação de um projeto ASP.NET MVC... 16 1.6 Anatomia de um projeto ASP.NET MVC... 20 1.6.1 Convenções... 22 2. ROTEAMENTO... 25 2.1 URL... 25 2.2 Introdução ao roteamento... 26 2.2.1 Criação de uma rota... 28 2.2.2 Parâmetros esperados pelo ASP.NET MVC... 30
VIII ASP.NET MVC 2.2.3 Mapeamento de parâmetros de roteamento em parâmetros do método de ação... 31 2.2.4 Uso de valores literais... 32 2.2.5 Parâmetro catch all... 32 2.2.6 Valores predefinidos... 33 2.2.7 Aplicação de restrições... 35 2.2.8 Outras operações sobre rotas... 39 2.2.9 Alguns detalhes internos... 39 2.3 Criação de URL... 43 2.3.1 Parâmetros em query string... 46 3. CONTROLADORES... 49 3.1 Introdução aos Controladores... 49 3.2 Utilização de parâmetros... 53 3.2.1 Utilização de vários parâmetros... 55 3.2.2 Parâmetros com valores predefinidos... 57 3.2.3 Parâmetros de tipos complexos... 58 3.3 Overload de métodos... 60 3.4 Controlo da invocação de métodos... 62 3.5 Utilização de ActionResult... 64 3.5.1 Observações finais sobre ActionResult... 69 3.6 Filtros de ação... 71 3.6.1 Filtros de autorização... 72 3.6.2 Filtros de pré-processamento e pós-processamento... 74 3.6.3 Filtros de exceção... 76 3.7 Métodos de ação assíncronos... 78 3.7.1 Métodos assíncronos em.net 4.0... 80 3.7.2 Métodos assíncronos em.net 4.5... 83 3.7.3 Timeouts... 84 3.7.4 Considerações adicionais... 84 3.8 Estado de sessão... 85 3.9 Funcionamento interno de controladores... 87 3.9.1 Interface IController... 88 3.9.2 Classe ControllerBase... 89 3.9.3 Classe Controller... 90 4. VISTAS... 95 4.1 Introdução às vistas... 95 4.1.1 Localização física de uma vista... 97 4.1.2 Criação de vistas... 99 4.1.3 Criação de vistas tipificadas... 104
IX 4.2 Motor de vistas Razor... 107 4.2.1 Expressões... 108 4.2.2 Encoding... 110 4.2.3 Blocos de código... 112 4.2.4 Combinação de texto com código Razor... 113 4.2.5 Comentários Razor... 114 4.2.6 Invocação de métodos genéricos... 114 4.3 Layouts... 114 4.3.1 ViewStart... 117 4.4 Vistas parciais... 118 4.5 Métodos auxiliares Razor... 119 4.6 Detalhes internos associados às vistas Razor... 120 4.6.1 A interface IViewEngine... 121 4.6.2 As vistas... 123 4.7 Outros motores de vistas... 127 4.8 Observações finais... 127 5. MÉTODOS AUXILIARES... 131 5.1 Introdução aos métodos auxiliares... 131 5.2 Formulários... 132 5.2.1 Introdução ao elemento form... 132 5.2.2 O método BeginForm... 133 5.3 Outros métodos de extensão... 137 5.4 Classe HtmlHelper... 137 5.4.1 Métodos relacionados com controlos... 140 5.4.2 Métodos relacionados com a validação... 144 5.4.3 Métodos auxiliares e modelos... 146 5.4.4 Métodos auxiliares tipificados... 150 5.4.5 Utilização de metadata... 152 5.4.6 Utilização de templates... 155 5.4.7 Métodos auxiliares de URL... 159 5.4.8 Métodos auxiliares de renderização... 160 5.5 Classe UrlHelper... 163 6. VALIDAÇÃO... 165 6.1 Introdução à validação... 165 6.2 Atributos de validação... 166 6.2.1 Outros atributos de validação... 170 6.2.2 Personalização das mensagens de erro... 173 6.3 Personalização da validação... 175
X ASP.NET MVC 6.3.1 Atributos de validação personalizados... 175 6.3.2 Interface IValidatableObjet... 180 6.4 Validação do modelo... 181 7. JAVASCRIPT E AJAX... 187 7.1 A visão do lado cliente... 187 7.2 Introdução ao JQuery... 188 7.2.1 A plataforma ASP.NET MVC e o JQuery... 190 7.3 A classe AjaxHelper... 192 7.3.1 Método ActionLink... 192 7.3.2 Formulários... 198 7.3.3 Obtenção direta de dados... 200 7.4 Compactação de scripts e bundling... 203 7.4.1 Regras de bundling personalizadas... 208 7.4.2 Bundling dinâmico... 210 7.4.3 Ignorar ficheiros... 211 7.5 Projetos Single Page Application... 212 8. SEGURANÇA... 215 8.1 Aspetos básicos... 215 8.2 Autenticação e autorização de utilizadores... 216 8.2.1 Autenticação de controladores... 219 8.2.2 Autorização para utilizadores e grupos... 219 8.3 Vetores de ataque... 222 8.3.1 Cross-site scripting (XSS)... 223 8.3.2 Cross-site Request Forgery... 228 8.3.3 Roubo de cookies... 232 8.3.4 Over-posting... 233 8.3.5 Open Redirection... 234 8.4 Outros conselhos... 236 9. OUTRAS FUNCIONALIDADES... 239 9.1 Áreas... 239 9.1.1 Adição de uma área... 239 9.1.2 Âmbitos... 242 9.1.3 Geração de URL... 244 9.2 Funcionalidades para dispositivos móveis... 246 9.2.1 Consumo de aplicações sem alterações... 246 9.2.2 Adaptative rendering... 247 9.2.3 Personalizar a vista usada na geração de HTML... 252 9.3 Caching... 260
XI 9.3.1 Output caching... 260 9.3.2 Caching de child actions... 264 9.3.3 Donut hole caching... 266 9.4 Model binding... 266 9.4.1 Value providers... 266 9.4.2 Model binders... 267 9.5 Injeção de dependências... 274 9.5.1 Serviços Singly-registered... 275 9.5.2 Serviços Multi-registered... 276 9.5.3 Controladores e vistas... 278 9.6 Construção de API para a Web... 280 9.6.1 Criação de um novo serviço... 282 9.6.2 Negociação do conteúdo... 286 9.6.3 Nomes personalizados de métodos... 288 9.6.4 Criação de novos registos... 291 9.6.5 Autorização e outras funcionalidades... 293 9.6.6 Observações Finais... 294 9.7 Testes unitários... 294 9.7.1 Testar controladores... 295 9.7.2 Testar rotas... 296 BIBLIOGRAFIA... 301 ÍNDICE REMISSIVO... 303