Twórz rozbudowane aplikacje webowe!
ASP.NET MVC 3 to kolejny krok w ewolucji platformy ASP.NET firmy Microsoft. W tej bibliotece programowania witryn WWW połączono efektywność i schludność architektury model-widok-kontroler (MVC), najnowsze pomysły i techniki programowania zwinnego oraz najlepsze części istniejącej platformy ASP.NET. Jest ona więc alternatywą dla tradycyjnych projektów ASP.NET Web Forms i ma nad tą platformą znaczną przewagę. Szkielet ASP.NET MVC 3 pozwoli Ci błyskawicznie stworzyć skalowalne, łatwe w utrzymaniu i rozwijaniu aplikacje internetowe, a jego wykorzystanie da Ci niepowtarzalną szansę dziecinnie łatwego stosowania testów jednostkowych i podejścia TDD (ang. test driven development). Co jeszcze możesz zyskać dzięki ASP.NET MVC 3?
O tym przekonasz się w trakcie lektury tej wyjątkowej książki. Jej autorzy przyjęli słuszną, zasadę, że dobry przykład mówi więcej niż kilka stron suchej teorii. Zobaczysz więc, jak wzorzec MVC sprawdza się w praktyce, jakie są jego zalety i wady oraz jak unikać typowych pułapek. Nauczysz się korzystać z filtrów, konfigurować kontrolery oraz projektować wydajny model. W dzisiejszych czasach bezpieczeństwo aplikacji stawiane jest na pierwszym miejscu, dlatego szczególną uwagę powinieneś zwrócić na rozdział poświęcony zabezpieczaniu stworzonego przez Ciebie rozwiązania. Ta książka to kompletna pozycja dla każdego programisty ASP.NET.
Sięgnij po nią i przekonaj się, że:
wzorzec MVC ułatwia pracę
jego zastosowanie korzystnie wpływa na jakość kodu
bezpieczeństwo aplikacji jest najważniejsze
implementacja wzorca MVC nie musi być trudna!
Wykorzystaj nowoczesne wzorce w Twoich projektach!
Znajdź podobne książki
Ostatnio czytane w tej kategorii
Darmowy fragment publikacji:
Tytuł oryginału: Pro ASP.NET MVC 3 Framework
Tłumaczenie: Paweł Gonera
ISBN: 978-83-246-4822-1
Original edition copyright © 2011 by Adam Freeman and Steven Sanderson.
All rights reserved.
Polish edition copyright © 2012 by HELION SA.
All rights reserved.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording or by any information storage retrieval system,
without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli.
Wydawnictwo HELION dołożyło wszelkich starań, by zawarte w tej książce informacje były kompletne
i rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym
ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi również
żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.
Wydawnictwo HELION
ul. Kościuszki 1c, 44-100 GLIWICE
tel. 32 231 22 19, 32 230 98 63
e-mail: helion@helion.pl
WWW: http://helion.pl (księgarnia internetowa, katalog książek)
Pliki z przykładami omawianymi w książce można znaleźć pod adresem:
ftp://ftp.helion.pl/przyklady/aspmv3.zip
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/aspmv3
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
• Kup książkę
• Poleć książkę
• Oceń książkę
• Księgarnia internetowa
• Lubię to! » Nasza społeczność
Spis treĂci
CzÚĂÊ I
Rozdziaï 1.
O autorach ...............................................................................................................5
O recenzencie technicznym ......................................................................................7
Wprowadzenie do ASP.NET MVC 3 .................................................. 19
Zagadnienia ogólne ...............................................................................................21
Krótka historia programowania witryn WWW .............................................................................. 21
Tradycyjna technologia ASP.NET Web Forms ........................................................................ 21
Co poszło nie tak z ASP.NET Web Forms? .............................................................................. 23
Programowanie witryn WWW — stan obecny .............................................................................. 23
Standardy WWW oraz REST ...................................................................................................... 24
Programowanie zwinne i sterowane testami ............................................................................ 24
Ruby on Rails ................................................................................................................................. 25
Sinatra ............................................................................................................................................. 25
Node.js ............................................................................................................................................ 25
Najważniejsze zalety ASP.NET MVC ............................................................................................... 26
Architektura MVC ........................................................................................................................ 26
Rozszerzalność .............................................................................................................................. 26
Ścisła kontrola nad HTML i HTTP ............................................................................................ 27
Łatwość testowania ....................................................................................................................... 27
Zaawansowany system routingu ................................................................................................ 28
Zbudowany na najlepszych częściach platformy ASP.NET ................................................... 28
Nowoczesne API ........................................................................................................................... 28
ASP.NET MVC jest open source ................................................................................................ 29
Kto powinien korzystać z ASP.NET MVC? ..................................................................................... 29
Porównanie z ASP.NET Web Forms ......................................................................................... 29
Migracja z Web Forms do MVC ................................................................................................ 30
Porównanie z Ruby on Rails ....................................................................................................... 30
Porównanie z MonoRail .............................................................................................................. 30
Co nowego w ASP.NET MVC 3? ...................................................................................................... 30
Podsumowanie ..................................................................................................................................... 31
SPIS TRE¥CI
Rozdziaï 2. Przygotowania ......................................................................................................33
Przygotowanie stacji roboczej ............................................................................................................ 33
Instalowanie Visual Studio 2010 ................................................................................................ 33
Instalowanie podstawowego oprogramowania ........................................................................ 34
Instalowanie opcjonalnych komponentów ............................................................................... 35
Przygotowanie serwera ....................................................................................................................... 37
Włączanie roli serwera WWW ................................................................................................... 37
Instalowanie dodatkowych komponentów ............................................................................... 38
Konfigurowanie Web Deployment ............................................................................................ 39
Uzyskiwanie dalszych informacji ...................................................................................................... 40
Podsumowanie ..................................................................................................................................... 41
Rozdziaï 3. Pierwsza aplikacja MVC .........................................................................................43
Tworzenie nowego projektu ASP.NET MVC ................................................................................. 43
Dodawanie pierwszego kontrolera ............................................................................................. 45
Przedstawiamy ścieżki .................................................................................................................. 47
Generowanie stron WWW ................................................................................................................ 47
Tworzenie i generowanie widoku .............................................................................................. 47
Dynamiczne dodawanie treści .................................................................................................... 50
Tworzenie prostej aplikacji wprowadzania danych ........................................................................ 51
Przygotowanie sceny .................................................................................................................... 51
Projektowanie modelu danych ................................................................................................... 52
Łączenie metod akcji .................................................................................................................... 53
Budowanie formularza ................................................................................................................. 55
Obsługa formularzy ...................................................................................................................... 57
Dodanie kontroli poprawności ................................................................................................... 60
Kończymy ...................................................................................................................................... 63
Podsumowanie ..................................................................................................................................... 65
Rozdziaï 4. Wzorzec MVC .........................................................................................................67
Historia MVC ....................................................................................................................................... 67
Wprowadzenie do wzorca MVC ....................................................................................................... 67
Budowa modelu domeny ............................................................................................................. 68
Implementacja MVC w ASP.NET .............................................................................................. 69
Porównanie MVC z innymi wzorcami ...................................................................................... 69
Przedstawiamy wzorzec Smart UI .............................................................................................. 69
Modelowanie domeny ......................................................................................................................... 72
Przykładowy model domeny ....................................................................................................... 73
Wspólny język ............................................................................................................................... 73
Agregaty i uproszczenia ............................................................................................................... 74
Definiowanie repozytoriów ......................................................................................................... 75
Budowanie luźno połączonych komponentów ............................................................................... 76
Wykorzystanie wstrzykiwania zależności ................................................................................. 77
Przykład specyficzny dla MVC ................................................................................................... 78
Użycie kontenera wstrzykiwania zależności ............................................................................. 79
Zaczynamy testy automatyczne ......................................................................................................... 80
Zadania testów jednostkowych ................................................................................................... 80
Zadania testów integracyjnych ................................................................................................... 87
Podsumowanie ..................................................................................................................................... 87
Rozdziaï 5. Najwaĝniejsze cechy jÚzyka ...................................................................................89
Najważniejsze cechy C# ...................................................................................................................... 89
Użycie automatycznie implementowanych właściwości ........................................................ 89
Użycie inicjalizatorów obiektów i kolekcji ................................................................................ 91
10
SPIS TRE¥CI
Użycie metod rozszerzających .................................................................................................... 93
Użycie wyrażeń lambda ............................................................................................................... 97
Automatyczne wnioskowanie typów ......................................................................................... 98
Użycie typów anonimowych ....................................................................................................... 99
Wykonywanie zapytań zintegrowanych z językiem .............................................................. 100
Przedstawiamy składnię silnika Razor ............................................................................................ 105
Tworzenie projektu .................................................................................................................... 105
Prosty widok korzystający z silnika Razor .............................................................................. 108
Podsumowanie ................................................................................................................................... 115
Rozdziaï 6. Waĝne narzÚdzia wspierajÈce MVC .....................................................................117
Użycie Ninject .................................................................................................................................... 117
Tworzenie projektu .................................................................................................................... 119
Zaczynamy korzystać z Ninject ................................................................................................ 119
Tworzenie łańcucha zależności ................................................................................................. 121
Definiowanie wartości właściwości i parametrów ................................................................. 122
Użycie samodzielnego łączenia ................................................................................................. 124
Dołączanie do typu pochodnego .............................................................................................. 124
Użycie łączenia warunkowego .................................................................................................. 125
Użycie Ninject w ASP.NET MVC ................................................................................................... 126
Testowanie jednostkowe w Visual Studio ...................................................................................... 128
Tworzenie projektu .................................................................................................................... 128
Tworzenie testów jednostkowych ............................................................................................ 130
Uruchamianie testów (nieudane) ............................................................................................. 133
Implementacja funkcji ............................................................................................................... 134
Użycie Moq ......................................................................................................................................... 135
Dodawanie Moq do projektu Visual Studio ........................................................................... 135
Tworzenie imitacji za pomocą Moq ......................................................................................... 135
Testy jednostkowe z użyciem Moq .......................................................................................... 137
Weryfikowanie przy użyciu Moq ............................................................................................. 139
Podsumowanie ................................................................................................................................... 139
SportsStore — kompletna aplikacja ....................................................................141
Zaczynamy .......................................................................................................................................... 142
Tworzenie rozwiązania i projektów w Visual Studio ............................................................ 142
Dodawanie referencji ................................................................................................................. 143
Konfigurowanie kontenera DI .................................................................................................. 144
Uruchamiamy aplikację ............................................................................................................. 145
Tworzenie modelu domeny ............................................................................................................. 146
Tworzenie abstrakcyjnego repozytorium ................................................................................ 147
Tworzenie imitacji repozytorium ............................................................................................. 148
Wyświetlanie listy produktów ......................................................................................................... 148
Dodawanie kontrolera ............................................................................................................... 148
Dodawanie widoku ..................................................................................................................... 149
Konfigurowanie domyślnej ścieżki .......................................................................................... 150
Uruchamianie aplikacji .............................................................................................................. 151
Przygotowanie bazy danych ............................................................................................................. 151
Tworzenie bazy danych ............................................................................................................. 152
Definiowanie schematu bazy danych ...................................................................................... 153
Dodawanie danych do bazy ....................................................................................................... 154
Tworzenie kontekstu Entity Framework ................................................................................. 154
Tworzenie repozytorium produktów ...................................................................................... 156
Rozdziaï 7.
11
SPIS TRE¥CI
Rozdziaï 8.
Rozdziaï 9.
12
Dodanie stronicowania ..................................................................................................................... 157
Wyświetlanie łączy stron ........................................................................................................... 158
Ulepszanie adresów URL ........................................................................................................... 165
Dodawanie stylu ................................................................................................................................. 165
Definiowanie wspólnej zawartości w pliku układu ................................................................ 166
Dodanie zasad CSS ..................................................................................................................... 167
Tworzenie widoku częściowego ............................................................................................... 167
Podsumowanie ................................................................................................................................... 169
SportsStore — nawigacja i koszyk na zakupy .....................................................171
Dodawanie kontrolek nawigacji ...................................................................................................... 171
Filtrowanie listy produktów ...................................................................................................... 171
Ulepszanie schematu URL ......................................................................................................... 172
Budowanie menu nawigacji po kategoriach ........................................................................... 175
Poprawianie licznika stron ........................................................................................................ 182
Budowanie koszyka na zakupy ........................................................................................................ 184
Definiowanie encji koszyka ....................................................................................................... 185
Tworzenie przycisków koszyka ................................................................................................ 188
Implementowanie kontrolera koszyka .................................................................................... 189
Wyświetlanie zawartości koszyka ............................................................................................. 190
Użycie dołączania danych ................................................................................................................ 193
Tworzenie własnego łącznika modelu ..................................................................................... 193
Kończenie budowania koszyka ........................................................................................................ 197
Usuwanie produktów z koszyka ............................................................................................... 197
Dodawanie podsumowania koszyka ........................................................................................ 198
Składanie zamówień .......................................................................................................................... 200
Rozszerzanie modelu domeny .................................................................................................. 200
Dodawanie procesu zamawiania .............................................................................................. 201
Implementowanie procesora zamówień ................................................................................. 204
Rejestrowanie implementacji .................................................................................................... 206
Dokańczanie kontrolera koszyka ............................................................................................. 206
Wyświetlanie informacji o błędach systemu kontroli poprawności ................................... 210
Wyświetlanie strony podsumowania ....................................................................................... 210
Podsumowanie ................................................................................................................................... 212
SportsStore — administracja ...............................................................................213
Dodajemy zarządzanie katalogiem .................................................................................................. 213
Tworzenie kontrolera CRUD .................................................................................................... 214
Generowanie tabeli z produktami dostępnymi w repozytorium ......................................... 215
Tworzenie nowego pliku układu .............................................................................................. 216
Implementowanie widoku listy ................................................................................................ 218
Edycja produktów ....................................................................................................................... 221
Tworzenie nowych produktów ................................................................................................. 232
Usuwanie produktów ................................................................................................................. 232
Zabezpieczanie funkcji administracyjnych .................................................................................... 235
Konfiguracja uwierzytelniania Forms ..................................................................................... 235
Realizacja uwierzytelniania z użyciem filtrów ........................................................................ 236
Tworzenie dostawcy uwierzytelniania ..................................................................................... 238
Tworzenie kontrolera AccountController .............................................................................. 239
Tworzenie widoku ...................................................................................................................... 240
Przesyłanie zdjęć ................................................................................................................................ 242
Rozszerzanie bazy danych ......................................................................................................... 242
Rozszerzanie modelu domeny .................................................................................................. 244
SPIS TRE¥CI
Tworzenie interfejsu użytkownika do przesyłania plików ................................................... 244
Zapisywanie zdjęć do bazy danych ........................................................................................... 245
Implementowanie metody akcji GetImage ............................................................................. 246
Wyświetlanie zdjęć produktów ................................................................................................. 247
Podsumowanie ................................................................................................................................... 249
CzÚĂÊ II
ASP.NET MVC 3 — szczegóïowy opis ............................................ 251
Rozdziaï 10. PrzeglÈd projektu MVC ........................................................................................253
Korzystanie z projektów MVC z Visual Studio ............................................................................. 253
Użycie kontrolerów aplikacji internetowej i intranetowej ................................................... 256
Przedstawiamy konwencje MVC ............................................................................................. 257
Debugowanie aplikacji MVC ........................................................................................................... 258
Tworzenie projektu .................................................................................................................... 258
Uruchamianie debugera Visual Studio .................................................................................... 258
Przerywanie pracy aplikacji przez debuger Visual Studio .................................................... 260
Użycie opcji Edit and Continue ................................................................................................ 263
Wstrzykiwanie zależności na poziomie projektu .......................................................................... 266
Podsumowanie ................................................................................................................................... 268
Rozdziaï 11. Adresy URL, routing i obszary ..............................................................................269
Wprowadzenie do systemu routingu .............................................................................................. 269
Tworzenie projektu routingu .................................................................................................... 270
Wprowadzenie do wzorców URL ............................................................................................ 271
Tworzenie i rejestrowanie prostej ścieżki ................................................................................ 272
Definiowanie wartości domyślnych ......................................................................................... 275
Użycie statycznych segmentów adresu URL .......................................................................... 277
Definiowanie własnych zmiennych segmentów .................................................................... 280
Definiowanie opcjonalnych segmentów URL ........................................................................ 282
Definiowanie ścieżek o zmiennej długości .............................................................................. 282
Definiowanie priorytetów kontrolerów na podstawie przestrzeni nazw ........................... 284
Ograniczenia ścieżek .................................................................................................................. 286
Routing żądań dla plików dyskowych ..................................................................................... 290
Pomijanie systemu routingu ..................................................................................................... 292
Generowanie wychodzących adresów URL ................................................................................... 293
Przygotowanie projektu ............................................................................................................. 293
Generowanie wychodzących adresów URL w widokach ...................................................... 294
Generowanie wychodzących adresów URL w metodach akcji ............................................ 299
Generowanie adresu URL na podstawie wybranej ścieżki ................................................... 300
Dostosowanie systemu routingu ..................................................................................................... 300
Tworzenie własnej implementacji RouteBase ........................................................................ 301
Tworzenie własnego obiektu obsługi ścieżki .......................................................................... 304
Korzystanie z obszarów .................................................................................................................... 305
Tworzenie obszaru ...................................................................................................................... 306
Wypełnianie obszaru .................................................................................................................. 307
Rozwiązywanie problemów z niejednoznacznością kontrolerów ....................................... 308
Generowanie łączy do akcji z obszarów .................................................................................. 310
Najlepsze praktyki schematu adresów URL .................................................................................. 310
Twórz jasne i przyjazne dla człowieka adresy URL ............................................................... 310
GET oraz POST — wybierz właściwie ..................................................................................... 311
Podsumowanie ................................................................................................................................... 312
13
SPIS TRE¥CI
Rozdziaï 12. Kontrolery i akcje .................................................................................................313
Wprowadzenie do kontrolerów ....................................................................................................... 313
Przygotowanie projektu ............................................................................................................. 313
Tworzenie kontrolera z użyciem interfejsu IController ....................................................... 313
Tworzenie kontrolera przez dziedziczenie po klasie Controller .......................................... 314
Odczytywanie danych wejściowych ................................................................................................ 316
Pobieranie danych z obiektów kontekstu ................................................................................ 316
Użycie parametrów metod akcji ............................................................................................... 317
Tworzenie danych wyjściowych ...................................................................................................... 319
Wyniki akcji ................................................................................................................................. 320
Zwracanie kodu HTML przez generowanie widoku ............................................................. 322
Przekazywanie danych z metody akcji do widoku ................................................................. 327
Wykonywanie przekierowań .................................................................................................... 331
Zwracanie danych tekstowych .................................................................................................. 333
Zwracanie danych XML ............................................................................................................. 336
Zwracanie danych JSON ............................................................................................................ 336
Zwracanie plików i danych binarnych ..................................................................................... 337
Zwracanie błędów i kodów HTTP ........................................................................................... 339
Tworzenie własnego wyniku akcji ............................................................................................ 341
Podsumowanie ................................................................................................................................... 343
Rozdziaï 13. Filtry ....................................................................................................................345
Użycie filtrów ..................................................................................................................................... 345
Wprowadzenie do czterech podstawowych typów filtrów ................................................... 346
Dołączanie filtrów do kontrolerów i metod akcji .................................................................. 347
Użycie filtrów autoryzacji .......................................................................................................... 348
Użycie filtrów wyjątków ............................................................................................................ 353
Użycie filtrów akcji i wyniku ..................................................................................................... 356
Użycie innych funkcji filtrów .................................................................................................... 361
Użycie filtrów wbudowanych .................................................................................................... 366
Podsumowanie ................................................................................................................................... 369
Rozdziaï 14. Rozszerzanie kontrolerów ....................................................................................371
Komponenty potoku przetwarzania żądania ................................................................................. 371
Tworzenie własnej fabryki kontrolerów ......................................................................................... 372
Definiowanie własnej fabryki kontrolerów ............................................................................. 372
Rejestrowanie własnej fabryki kontrolerów ............................................................................ 374
Wykorzystanie wbudowanej fabryki kontrolerów ........................................................................ 374
Nadawanie priorytetów przestrzeniom nazw ......................................................................... 374
Dostosowywanie sposobu tworzenia kontrolerów w DefaultControllerFactory .............. 375
Tworzenie własnego obiektu wywołującego akcje ........................................................................ 377
Użycie wbudowanego obiektu wywołującego akcje ..................................................................... 378
Użycie własnych nazw akcji ...................................................................................................... 379
Selekcja metod akcji .................................................................................................................... 380
Użycie selektorów metod akcji do obsługi żądań REST ....................................................... 383
Poprawianie wydajności z użyciem specjalizowanych kontrolerów .......................................... 385
Użycie kontrolerów bezstanowych .......................................................................................... 385
Użycie kontrolerów asynchronicznych ................................................................................... 386
Podsumowanie ................................................................................................................................... 394
14
SPIS TRE¥CI
Rozdziaï 15. Widoki .................................................................................................................395
Tworzenie własnego silnika widoku ............................................................................................... 395
Tworzenie własnej implementacji IView ................................................................................ 397
Tworzenie implementacji IViewEngine .................................................................................. 397
Rejestrowanie własnego silnika widoku .................................................................................. 398
Korzystanie z silnika Razor .............................................................................................................. 401
Sposób generowania widoków przez Razor ............................................................................ 401
Wstrzykiwanie zależności w widokach Razor ........................................................................ 402
Konfigurowanie wyszukiwania lokalizacji widoków ............................................................. 404
Dodawanie dynamicznych treści do widoku Razor ..................................................................... 405
Użycie kodu wbudowanego ...................................................................................................... 405
Użycie metod pomocniczych HTML .............................................................................................. 410
Tworzenie wewnętrznej metody pomocniczej HTML .......................................................... 411
Tworzenie zewnętrznej metody pomocniczej HTML ........................................................... 411
Użycie wbudowanych metod pomocniczych ......................................................................... 413
Zastosowanie sekcji ........................................................................................................................... 425
Sprawdzanie istnienia sekcji ...................................................................................................... 427
Generowanie sekcji opcjonalnych ............................................................................................ 428
Użycie widoków częściowych .......................................................................................................... 428
Tworzenie widoku częściowego ............................................................................................... 428
Użycie silnie typowanych widoków częściowych .................................................................. 430
Użycie akcji podrzędnych ................................................................................................................. 431
Tworzenie akcji podrzędnych ................................................................................................... 431
Wywoływanie akcji podrzędnych ............................................................................................. 432
Podsumowanie ................................................................................................................................... 433
Rozdziaï 16. Szablony modelu .................................................................................................435
Użycie metod pomocniczych widoku szablonowego ................................................................... 435
Nadawanie stylów wygenerowanym znacznikom HTML .................................................... 438
Użycie metadanych modelu ...................................................................................................... 440
Użycie metadanych wartości danych ....................................................................................... 443
Korzystanie z parametrów typów złożonych .......................................................................... 447
Dostosowywanie systemu metod pomocniczych widoku szablonowego ................................. 448
Tworzenie własnego szablonu edytora .................................................................................... 448
Tworzenie własnego szablonu wyświetlania ........................................................................... 450
Tworzenie szablonu ogólnego .................................................................................................. 452
Wymiana szablonów wbudowanych ....................................................................................... 453
Użycie właściwości ViewData.TemplateInfo .......................................................................... 454
Przekazywanie dodatkowych metadanych do szablonu ....................................................... 455
System dostawców metadanych ...................................................................................................... 456
Tworzenie własnego dostawcy metadanych modelu ............................................................ 457
Dostosowywanie adnotacji danych dostawcy metadanych modelu ................................... 458
Podsumowanie ................................................................................................................................... 459
Rozdziaï 17. DoïÈczanie modelu ..............................................................................................461
Użycie dołączania danych ................................................................................................................ 461
Użycie domyślnego łącznika modelu .............................................................................................. 462
Dołączanie typów prostych ....................................................................................................... 463
Dołączanie typów złożonych ..................................................................................................... 464
Dołączanie tablic i kolekcji ........................................................................................................ 467
15
SPIS TRE¥CI
Jawne wywoływanie dołączania modelu ........................................................................................ 469
Ograniczanie dołączania do wybranego źródła danych ........................................................ 470
Obsługa błędów dołączania modelu ........................................................................................ 471
Użycie dołączania modelu w celu pobierania przesłanych plików ............................................ 472
Dostosowanie systemu dołączania danych .................................................................................... 472
Tworzenie własnego dostawcy wartości .................................................................................. 473
Tworzenie łącznika modelu obsługującego zależności ......................................................... 474
Tworzenie własnego łącznika modelu ..................................................................................... 475
Tworzenie dostawcy łączników modelu .................................................................................. 477
Użycie atrybutu ModelBinder .................................................................................................. 478
Podsumowanie ................................................................................................................................... 478
Rozdziaï 18. Kontrola poprawnoĂci modelu ............................................................................479
Tworzenie projektu ........................................................................................................................... 479
Jawna kontrola poprawności modelu ............................................................................................. 481
Wyświetlanie komunikatów kontroli poprawności ..................................................................... 482
Wyświetlanie komunikatów kontroli poprawności poziomu właściwości ........................ 486
Użycie alternatywnych technik kontroli poprawności ................................................................. 487
Kontrola poprawności w łączniku modelu ............................................................................. 488
Definiowanie zasad poprawności za pomocą metadanych .................................................. 491
Definiowanie modeli samokontrolujących się ....................................................................... 494
Tworzenie własnego dostawcy kontroli poprawności ........................................................... 495
Użycie kontroli poprawności po stronie klienta ........................................................................... 499
Aktywowanie i wyłączanie kontroli poprawności po stronie klienta ................................. 499
Użycie kontroli poprawności po stronie klienta .................................................................... 502
Jak działa kontrola poprawności po stronie klienta? ............................................................. 504
Modyfikowanie kontroli poprawności na kliencie ................................................................ 505
Wykonywanie zdalnej kontroli poprawności ................................................................................ 511
Podsumowanie ................................................................................................................................... 513
Rozdziaï 19. NieprzeszkadzajÈcy Ajax ......................................................................................515
Użycie nieprzeszkadzających wywołań Ajax w MVC .................................................................. 515
Tworzenie projektu .................................................................................................................... 515
Włączanie i wyłączanie nieprzeszkadzających wywołań Ajax ............................................. 518
Użycie nieprzeszkadzających formularzy Ajax ...................................................................... 518
Sposób działania nieprzeszkadzających wywołań Ajax ........................................................ 520
Ustawianie opcji Ajax ........................................................................................................................ 520
Zapewnienie kontrolowanej degradacji .................................................................................. 520
Informowanie użytkownika o realizowanym żądaniu Ajax ................................................. 522
Wyświetlanie pytania przed wysłaniem żądania .................................................................... 523
Tworzenie łączy Ajax ........................................................................................................................ 524
Zapewnienie kontrolowanej degradacji dla łączy .................................................................. 526
Korzystanie z funkcji wywołania zwrotnego w Ajaksie ............................................................... 527
Wykorzystanie JSON ......................................................................................................................... 529
Dodanie obsługi JSON do kontrolera ...................................................................................... 530
Przetwarzanie JSON w przeglądarce ........................................................................................ 531
Wykrywanie żądań Ajax w metodach akcji ............................................................................ 532
Odbieranie danych JSON .......................................................................................................... 533
Podsumowanie ................................................................................................................................... 535
16
SPIS TRE¥CI
Rozdziaï 20. jQuery ..................................................................................................................537
Tworzenie projektu ........................................................................................................................... 537
Odwoływanie się do jQuery ............................................................................................................. 539
Tworzenie kodu jQuery .................................................................................................................... 541
Utworzenie środowiska testowego dla jQuery ....................................................................... 542
Podstawy jQuery ................................................................................................................................ 544
Poznajemy selektory jQuery ..................................................................................................... 545
Użycie filtrów jQuery ................................................................................................................. 546
Poznajemy metody jQuery ........................................................................................................ 548
Czekając na DOM ....................................................................................................................... 549
Użycie metod CSS z jQuery ....................................................................................................... 550
Manipulowanie modelem DOM .............................................................................................. 552
Użycie zdarzeń jQuery ...................................................................................................................... 555
Użycie efektów wizualnych jQuery ................................................................................................. 556
Użycie jQuery UI ............................................................................................................................... 558
Odwoływanie się do jQuery UI ................................................................................................ 558
Tworzenie lepszych przycisków ............................................................................................... 559
Użycie kontrolki Slider .............................................................................................................. 560
Podsumowanie ................................................................................................................................... 562
CzÚĂÊ III
Tworzenie udanych projektów ASP.NET MVC 3 ............................. 565
Rozdziaï 21. Bezpieczeñstwo i sïabe punkty ............................................................................567
Każde dane mogą być sfałszowane .................................................................................................. 567
Fałszowanie żądań HTTP .......................................................................................................... 569
Skrypty międzywitrynowe i wstrzykiwanie HTML ...................................................................... 570
Przedstawiamy ataki XSS ........................................................................................................... 570
Kodowanie HTML w Razor ...................................................................................................... 571
Kontrola żądań ............................................................................................................................ 572
Kodowanie ciągów znaków JavaScript a XSS ......................................................................... 574
Przejęcie sesji ...................................................................................................................................... 576
Obrona przez sprawdzanie adresu IP klienta ......................................................................... 576
Obrona przez ustawienie w cookie znacznika HttpOnly ...................................................... 577
Międzywitrynowe fałszowanie żądań ............................................................................................. 577
Atak ............................................................................................................................................... 578
Obrona .......................................................................................................................................... 578
Ochrona przed atakami CSRF z użyciem metod zapobiegających fałszerstwom ............. 579
Wstrzykiwanie SQL ........................................................................................................................... 580
Atak ............................................................................................................................................... 580
Obrona z użyciem zapytań parametrycznych ........................................................................ 581
Obrona z użyciem odwzorowania obiektowo-relacyjnego .................................................. 581
Bezpieczne korzystanie z biblioteki MVC ...................................................................................... 581
Nie udostępniaj przypadkowo metod akcji ............................................................................ 581
Nie używaj dołączania modelu w celu zmiany wrażliwych właściwości ............................ 582
Podsumowanie ................................................................................................................................... 582
Rozdziaï 22. Uwierzytelnianie i autoryzacja .............................................................................583
Użycie uwierzytelniania Windows .................................................................................................. 583
Użycie uwierzytelniania Forms ....................................................................................................... 585
Konfiguracja uwierzytelniania Forms ..................................................................................... 586
Uwierzytelnianie Forms bez użycia cookies ........................................................................... 587
17
SPIS TRE¥CI
Członkostwo, role i profile ............................................................................................................... 588
Konfigurowanie i wykorzystanie członkostwa ....................................................................... 589
Konfigurowanie i wykorzystanie ról ........................................................................................ 597
Konfigurowanie i wykorzystanie profili .................................................................................. 600
Dlaczego nie należy korzystać z uwierzytelniania bazującego na adresach URL ..................... 604
Ograniczanie dostępu z użyciem adresów IP oraz domen .......................................................... 604
Podsumowanie ................................................................................................................................... 606
Rozdziaï 23. Instalacja .............................................................................................................607
Przygotowanie aplikacji do dystrybucji .......................................................................................... 607
Wykrywanie błędów przed instalacją ...................................................................................... 607
Kontrolowanie dynamicznej kompilacji stron ....................................................................... 608
Przygotowanie do instalacji binarnej ....................................................................................... 609
Przygotowanie pliku Web.config do przekształcania ............................................................ 609
Przygotowanie projektu do instalacji bazy danych ................................................................ 619
Podstawy działania serwera IIS ........................................................................................................ 621
Witryny Web ............................................................................................................................... 621
Katalogi wirtualne ....................................................................................................................... 621
Pule aplikacji ................................................................................................................................ 621
Wiązanie witryn z nazwami hostów, adresami IP oraz portami ......................................... 622
Przygotowanie serwera do instalacji ............................................................................................... 622
Instalowanie aplikacji ........................................................................................................................ 624
Instalowanie aplikacji przez kopiowanie plików .................................................................... 624
Użycie pakietu instalacyjnego ................................................................................................... 625
Publikowanie jednym kliknięciem ........................................................................................... 628
Podsumowanie ................................................................................................................................... 629
Skorowidz ............................................................................................................631
18
R O Z D Z I A 1 8
Kontrola poprawnoĂci modelu
W poprzednim rozdziale przedstawiliśmy, w jaki sposób na podstawie żądań HTTP biblioteka MVC tworzy
obiekty modelu w procesie dołączania modelu. Zakładaliśmy, że dane wprowadzone przez użytkownika były
prawidłowe. W rzeczywistości użytkownicy często wprowadzają dane, z których nie możemy skorzystać, i tym
zajmiemy się teraz — kontrolą poprawności danych modelu.
Kontrola poprawności modelu jest procesem, dzięki któremu upewniamy się, że otrzymane dane nadają
się do użycia w modelu, a jeżeli nie, dostarczamy użytkownikom informacje pomagające rozwiązać problem.
Pierwsza część procesu — sprawdzanie otrzymanych danych — jest jednym ze sposobów zapewnienia
integralności danych w modelu domeny. Przez odrzucenie danych, które nie mają sensu w kontekście naszej
domeny, zapobiegamy powstawaniu dziwnych i niechcianych stanów aplikacji. Druga część — pomoc
użytkownikowi w rozwiązaniu problemu — jest równie ważna. Jeżeli nie zapewnimy użytkownikowi informacji
i narzędzi potrzebnych do interakcji z aplikacją w oczekiwany przez nas sposób, szybko spowodujemy jego
frustrację. W przypadku aplikacji dostępnych publicznie często powoduje to wycofywanie się użytkowników,
natomiast w przypadku aplikacji korporacyjnych może to skutkować spowolnieniem ich działań. Każda z tych
sytuacji jest niepożądana.
Na szczęście biblioteka MVC zapewnia rozbudowaną obsługę kontroli poprawności modelu. Pokażemy
teraz, w jaki sposób korzystać z podstawowych funkcji, a następnie przejdziemy do bardziej zaawansowanych
technik sterowania procesem kontroli poprawności.
Tworzenie projektu
Potrzebna jest nam prosta aplikacja MVC, w której będziemy mogli stosować różne techniki kontroli poprawności
modelu. Na jej potrzeby utworzyliśmy klasę modelu widoku o nazwie Appointment, zamieszczoną na listingu 18.1.
Listing 18.1. Klasa modelu widoku
using System;
using System.ComponentModel.DataAnnotations;
namespace MvcApp.Models {
public class Appointment {
public string ClientName { get; set; }
[DataType(DataType.Date)]
public DateTime Date {get; set;}
CZ}¥m II ASP.NET MVC 3 — SZCZEGÓOWY OPIS
public bool TermsAccepted { get; set; }
}
}
Na listingu 18.2 zamieszczony jest widok generujący edytory dla klasy Appointment, zapisany w pliku
MakeBooking.cshtml.
Listing 18.2. Widok edytora
@model MvcApp.Models.Appointment
@{
ViewBag.Title = Rezerwacja ;
}
h4 Rezerwacja wizyty /h4
@using (Html.BeginForm()) {
p Nazwisko: @Html.EditorFor(m = m.ClientName) /p
p Data wizyty: @Html.EditorFor(m = m.Date) /p
p @Html.EditorFor(m = m.TermsAccepted) AkceptujÚ warunki /p
input type= submit value= WyĂlij rezerwacjÚ /
}
Na listingu 18.3 zamieszczona jest klasa kontrolera, AppointmentController, posiadająca metody akcji
operujące na obiektach Appointment.
Listing 18.3. Klasa AppointmentController
public class AppointmentController : Controller {
private IAppointmentRepository repository;
public AppointmentController(IAppointmentRepository repo) {
repository = repo;
}
public ViewResult MakeBooking() {
return View(new Appointment { Date = DateTime.Now });
}
[HttpPost]
public ViewResult MakeBooking(Appointment appt) {
repository.SaveAppointment(appt);
return View( Completed , appt);
}
}
Kontroler realizuje znany już nam wzorzec. Metoda akcji MakeBooking generuje widok MakeBooking.cshtml.
Widok ten zawiera formularz, którego dane są przesyłane do drugiej wersji metody MakeBooking, oczekującej
parametru Appointment. Łącznik modelu tworzy obiekt Appointment na podstawie wartości elementów formularza
HTML, a następnie przekazuje go do metody akcji, zapisującej nowy obiekt w repozytorium, które zostanie
dostarczone poprzez wstrzykiwanie zależności (utworzyliśmy tylko szkielet repozytorium — dane wizyty
są ignorowane, ponieważ chcemy się tu skupić wyłącznie na kontroli poprawności). Po przekazaniu wizyty
do repozytorium kontroler generuje widok Completed.cshtml, który pozwala przekazać informację zwrotną
dla użytkownika. Na rysunku 18.1 przedstawiona jest ta sekwencja widoków.
480
ROZDZIA 18. KONTROLA POPRAWNO¥CI MODELU
Rysunek 18.1. Kolejność widoków w przykładowej aplikacji
Obecnie nasza aplikacja będzie akceptowała dowolne przesłane przez użytkownika dane, ale aby zachować
integralność aplikacji i modelu domeny, wymagamy spełnienia trzech warunków przed zaakceptowaniem
przesłanych przez użytkownika danych wizyty:
x użytkownik musi podać nazwisko,
x użytkownik musi podać przyszłą datę (w formacie mm-dd-rrrr),
x użytkownik musi zaznaczyć pole wyboru informujące o zaakceptowaniu zasad.
Kontrola poprawności modelu jest procesem umożliwiającym wymuszenie tych wymagań. W kolejnych
pu
Pobierz darmowy fragment (pdf)
Gdzie kupić całą publikację:
Opinie na temat publikacji:
Inne popularne pozycje z tej kategorii:
Czytaj również:
Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką :