Tải bản đầy đủ (.pdf) (147 trang)

giáo trình lập trình web

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.21 MB, 147 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

<b>ắI HịC CễNG NGH TP.HCM </b>

<b>LP TRÌNH WEB </b>

<b>Biên so¿n: Ngun Đình Ánh </b>

Ngun Huy cưßng Mai Ngọc Thu

Trần Đăng Khoa

<i>Ph¿m Hău Kỳ </i>

Website:

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

<b>LÂP TRÌNH WEB </b>

Ân bÁn 2023

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>MĀC LĀC </b>

<b><small>MĀCLĀC ...IH¯âNGDÀN ... VI</small></b>

<b><small>BÀI 1TàNG QUAN VÀ ASP.NET ... 8</small></b>

<i><small>Dễ dàng triÃn khai và cấu hình ... 10</small></i>

<b><small>1.2TÍNHNNGMâITRONGASP.NET4.5 ... 10</small></b>

<i><small>Đọc và ghi bất đồng bộ các đối t°ợng HTTP Request và Response... 11</small></i>

<i><small>Hỗ trợ cho các các module và handler bất đồng bộ dạng await và task-based (Support for await and Task-Based Asynchronous Modules and Handlers) ... 12</small></i>

<i><small>Các tính năng mới kiÃm tra tính hợp lệ đối với Request ... 14</small></i>

<i><small>Th° viện Anti-XSS ... 16</small></i>

<i><small>Hỗ trợ cho giao thức WebSockets ... 17</small></i>

<i><small>Bundling và Minification ... 19</small></i>

<i><small>Cải thiện tốc độ cho Web Hosting ... 19</small></i>

<b><small>1.3T¾OTRANGWEBVâIVISIUALSTUDIO ... 19</small></b>

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

<b><small>BÀI 3TRUY CÂP DĂ LIàU ... 36</small></b>

<b><small>3.1TàNGQUAN ... 36</small></b>

<b><small>3.2TRUYCÂPDĂLIàUADO.NET ... 38</small></b>

<b><small>3.3TRUYCÂPDĂLIàUXML ... 39</small></b>

<i><small>Sử dụng jQuery trong ASP.NET ... 50</small></i>

<b><small>4.2LÂPTRÌNHVâI JQUERY ... 51</small></b>

<i><small>Chạy mã khi trang đã sẵn sàng ... 51</small></i>

<i><small>Khác biệt với Web Form ... 61</small></i>

<i><small>Lợi ích của ứng dụng web dựa trên mơ hình MVC ... 62</small></i>

<b><small>5.2XÂYDĄNGĀNGDĀNGVâIASP.NETMVC ... 64</small></b>

<i><small>Tạo Project với ASP.NET MVC Web Application ... 64</small></i>

<b><small>BÀI 6TàNG QUAN VÀ ASP.NET CORE ... 71</small></b>

<b><small>6.1TàNGQUANASP.NETCORE ... 71</small></b>

<i><small>Giới thiệu ASP.NET Core ... 71</small></i>

<i><small>Lý do chọn ASP.NET Core? ... 72</small></i>

<i><small>Sự khác biệt giữa .NET Framework và .NET Core ... 74</small></i>

<i><small>So sánh ASP.NET với ASP.NET Core ... 74</small></i>

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

<i><small>Mơ hình ASP.NET Core MVC ... 77</small></i>

<i><small>Đặc tính trong ASP.NET Core ... 77</small></i>

<i><small>Sự khác biệt của ASP.NET Core và ASP.NET ... 78</small></i>

<i><small>Lợi ích của ứng dụng web khi xây dựng bằng ASP.NET Core ... 79</small></i>

<b><small>6.2XÂYDĄNGĀNGDĀNGVâIASP.NETCORE ... 80</small></b>

<i><small>Tạo Project với ASP.NET Core Empty ... 80</small></i>

<b><small>TÓMTÄT ... 85</small></b>

<b><small>BÀITÂP ... 86</small></b>

<b><small>BÀI 7TàNG QUAN VÀ ASP.NET CORE MVC ... 87 </small></b>

<b><small>7.1TàNGQUANASP.NETCORE MVC ... 87</small></b>

<i><small>Giới thiệu ASP.NET CORE MVC... 87</small></i>

<i><small>TÌM HIÂU VÀ MODEL ... 88</small></i>

<i><small>TÌM HIÂU VÀ CONTROLLER ... 91</small></i>

<i><small>TÌM HIÂU VÀ VIEW ... 92</small></i>

<b><small>7.2XÂYDĄNGĀNGDĀNGVâIASP.NETCORE MVC ... 94</small></b>

<i><small>Tạo Project với ASP.NET Core MVC ... 94</small></i>

<b><small>TÓMTÄT ... 97 </small></b>

<b><small>BÀITÂP ... 98</small></b>

<b><small>BÀI 8KỸ THUÂT TRUYÀN DĂ LIàU TRONG ASP.NET CORE MVC ... 100</small></b>

<b><small>8.1VIEWBAG TRONG ASP.NETCORE MVC ... 100</small></b>

<i><small>So sánh ViewData với các ph°¡ng thức truyÁn dữ liệu khác ... 104</small></i>

<i><small>Những l°u ý khi sử dụng 8ViewData9 ... 104</small></i>

<i><small>K¿t luận ... 104</small></i>

<b><small>8.3STRONGLY TYPED VIEWS TRONG ASP.NETCORE MVC ... 105</small></b>

<i><small>Định nghĩa Strongly Typed Views ... 105</small></i>

<i><small>Đặc điÃm của Strongly Typed Views ... 105</small></i>

<i><small>Cách sử dụng Strongly Typed Views ... 105</small></i>

<i><small>Ví dụ chi ti¿t ... 106</small></i>

<i><small>Tóm tắt ... 107</small></i>

<b><small>8.4VIEWMODEL TRONG ASP.NETCORE MVC ... 108</small></b>

<i><small>Định nghĩa ViewModel ... 108</small></i>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

<i><small>Tại sao sử dụng ViewModel? ... 108</small></i>

<i><small>Cách tạo ViewModel ... 108</small></i>

<i><small>Ví dụ chi ti¿t ... 109</small></i>

<i><small>Tóm tắt ... 109</small></i>

<b><small>8.5TEMPDATA TRONG ASP.NETCORE MVC... 110</small></b>

<i><small>Khái niệm TempData... 110</small></i>

<i><small>¯u điÃm của TempData ... 110</small></i>

<i><small>Cách hoạt ng ca TempData ... 110</small></i>

<b><small>BI 9ịNH TUYắN TRONG ASP.NET CORE MVC ... 114</small></b>

<b><small>9.1GIõI THIU ịNH TUYắN TRONG ASP.NETCORE MVC ... 114</small></b>

<i><small>Định tuy¿n trong ASP.NET Core MVC là gì? ... 114</small></i>

<i><small>Định tuy¿n hoạt động nh° th¿ nào trong ASP.NET Core? ... 115</small></i>

<i><small>Tìm hiÃu định tuy¿n URL trong ASP.NET Core MVC ... 117</small></i>

<b><small>TĨMTÄT ... 119</small></b>

<b><small>BÀITÂP ... 120</small></b>

<b><small>BÀI 10QN LÝ TR¾NG THÁI TRONG ASP.NET CORE MVC ... 121</small></b>

<b><small>10.1COOKIES IN ASP.NETCORE MVC ... 121</small></b>

<b><small>BÀI 11ENTITY FRAMEWORK CORE ... 126</small></b>

<b><small>11.1GIâI THIàU VÀ ENTITY FRAMEWORK CORE ... 126</small></b>

<i><small>Entity Framework Core là gì? ... 127</small></i>

<i><small>Khái niệm ORM ... 127</small></i>

<i><small>Tại sao lại sử dụng ORM? ... 127</small></i>

<i><small>Vì sao chọn Entity Framework Core trong các ứng dụng .NET? ... 128</small></i>

<b><small>11.2CÁCPH¯¡NGPHÁPTI¾PCÂNTRONGENTITYFRAMEWORKCORE ... 128</small></b>

<i><small>Code First Approach ... 129</small></i>

<i><small>Database First Approach ... 130</small></i>

<b><small>11.3EFCORE DATABASE PROVIDERS ... 130</small></b>

<b><small>11.4ASP.NETCORE MVCSĀ DĀNG EFCORE ... 130</small></b>

<i><small>Thao tác CRUD trong ASP.NET Core MVC với EF Core ... 131</small></i>

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

<i><small>Mẫu Thi¿t k¿ Repository trong ASP.NET Core MVC sử dụng EF Core ... 134</small></i>

<i><small>Ví Dụ Minh Họa: Xác Thực Ng°ời Dùng ... 139</small></i>

<i><small>Phân QuyÁn và KiÃm Soát Truy Cập ... 140</small></i>

<b><small>12.2ASP.NETCORE IDENTITY ... 141</small></b>

<i><small>Thi¿t Lập ASP.NET Core Identity ... 141</small></i>

<i><small>Ví Dụ Minh Họa: Đăng Ký và Đăng Nhập Ng°ời Dùng ... 142</small></i>

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

<b>H¯âNG DÀN </b>

<i><b>MƠ TÀ MƠN HÞC </b></i>

Mơn học trang bá kiÁn thāc nÃn tÁng và cách xây dựng các āng dāng web đa năng và hiãu suÃt cao. Môn học cung cÃp mßt cái nhìn tãng quan và nÃn tÁng ASP.NET, giái thiãu đÁn học viên các thành phần cßt lõi, cách thāc ho¿t đßng cÿa ASP.NET Core, cũng như mơ hình MVC, làm nÃn tÁng cho viãc phát trißn web. Sinh viên s¿ đưÿc hưáng d¿n chi tiÁt qua tÿng bài học, tÿ nhăng khái niãm cơ bÁn đÁn các kÿ thuÁt lÁp trình nâng cao.

Trong quá trình học, khơng chß dÿng l¿i á lý thut, mơn học còn chú trọng vào viãc thực hành qua viãc áp dāng các kiÁn thāc vào dự án thực tÁ. Học viên s¿ có cơ hßi làm viãc trực tiÁp trên các dự án web, áp dāng kiÁn thāc và Entity Framework Core trong viãc t¿o và quÁn lý cơ sá dă liãu, xây dựng các chāc năng đánh tuyÁn phāc t¿p và quÁn lý tr¿ng thái āng dāng. KÁt thúc mơn học, học viên s¿ có đÿ khÁ năng đß tự tin xây dựng và trißn khai các āng dāng web chuyên nghiãp vái ASP.NET Core MVC.

<b>NàI DUNG MÔN HÞC </b>

 Bài 1 TâNG QUAN VÂ ASP.NET

 Bài 2 CÁC LàP SĀ DĀNG TRONG ASP.NET  Bài 3 TRUY CÀP DĂ LIâU

 Bài 4 LÀP TRÌNH VàI JQUERY

 Bài 5 TâNG QUAN VÂ ASP.NET MVC  Bài 6 TâNG QUAN VÂ ASP.NET Core

 Bài 7 TâNG QUAN VÂ ASP.NET CORE MVC

Bi 8 Kỵ THUT TRUYN DĂ LIâU TRONG ASP.NET CORE MVC  Bài 9 ĐàNH TUYÀN TRONG ASP.NET CORE MVC

 Bài 10 QUÀN LÝ TR¾NG THÁI TRONG ASP.NET CORE MVC  Bài 11 ENTITY FRAMEWORK CORE

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

 Bài 12 BÀO MÀT CHO ĀNG DĀNG ASP.NET CORE MVC

<b>YấU CU MễN HịC </b>

Ngòi hc vn dng đưÿc kiÁn thāc nÃn tÁng và lÁp trình web đß có thß thiÁt kÁ cài đ¿t các āng dāng web, như quÁn lý website, hã quÁn trá nßi dung, āng dāng thương m¿i điãn tā, các dách vā web.

Kÿ năng lÁp trình, và phân tích thiÁt kÁ āng dāng thành th¿o.

Ngưßi học cần đi học đầy đÿ, đọc các nßi dung s¿ đưÿc học trưác khi đÁn láp, làm các bài tÁp và nhà và đÁm bÁo thßi gian tự học á nhà.

<b>CÁCH TI¾P NHÂN NàI DUNG MễN HịC </b>

ò hc tòt mụn ny, ngòi hc cần đọc trưác các nßi dung chưa đưÿc học trên láp; tham gia đÃu đ¿n và tích cực trên láp; hißu các khái niãm, tính chÃt và ví dā t¿i láp học. Sau khi học xong, cần ôn l¿i bài đã học và làm các bài tÁp, câu trắc nghiãm. Tìm đọc thêm các tài liãu khác liên quan đÁn bài học và làm thêm bài tÁp.

<b>PH¯¡NG PHÁP ĐÁNH GIÁ MƠN HÞC </b>

Mơn học đưÿc đánh giá gám hai thành phần.

 Đißm q trình (50%): Hình thāc và cách đánh giá do giÁng viên d¿y lý thut qut đánh đưÿc phê dut cÿa bß mơn.

 Đißm thi ci kỳ (50%): Hình thāc làm đá án môn học và chÃm thi vÃn đáp dựa trên nßi dung đá án mơn học kÁt hÿp vái lý thuyÁt trong các bài học. Danh sách đá án do giÁng viên qut đánh đưÿc bß mơn kißm dut và cung cÃp vào đầu khóa học.

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

<b>Bài 1 TàNG QUAN VÀ ASP.NET </b>

Học xong bài này ngưßi học s¿ nắm đưÿc các nßi dung sau:

- <i>HiÃu đ°ợc tổng quan vÁ công nghệ ASP.NET, Khái niệm vÁ ASP.NET. </i>

- <i>Bi¿t đ°ợc những tính năng mới của ASP.NET 4.5 so với ASP.NET 2.0. </i>

- <i>Bi¿t cách tạo website ASP.NET MVC trong Visual Studio. </i>

<b> Giãi thiáu </b>

<b>Trưác hÁt, tên đầy đÿ cÿa ASP.NET là Active Server Pages .NET (.NET á đây là </b>

.NET framework). Nói đơn giÁn thì ASP.NET là mßt cơng nghã có tính cách m¿ng dùng đß phát trißn các āng dāng và m¿ng hiãn nay cũng như trong tương lai. ASP.NET là

<i>mßt phương pháp tã chāc hay khung tã chāc (framework) đß thiÁt lÁp các āng dāng </i>

<i><b>m¿nh cho m¿ng dựa trên CLR (Common Language Runtime). </b></i>

<b> ASP.NET tích hÿp vãi Framework </b>

.NET Framework đưÿc chia thành bß các tác vā cho tÿng chāc năng gám các láp

<i>(class), các cÃu trúc (structures), các giao diãn (interfaces) và các lõi (core) thành phần </i>

chương trình. Trưác khi sā dāng thành phần nào ta phÁi hißu cơ bÁn và chāc năng, các tã chāc cÿa nó. Mỗi mßt trong hàng nghàn các tầng láp đưÿc nhóm theo trình tự logic,

<b>thā bÁc đưÿc gọi là mßt namespace. Mỗi namespace cung cÃp mßt tính năng. </b>

<b>Tính đa ngơn ngă </b>

Đß xây dựng mßt āng dāng web chúng ta khơng chß chọn mßt ngơn ngă mà có thß chọn nhiÃu ngôn ngă khác. ĐiÃu quan trọng là các ngơn ngă chúng ta chọn mã cÿa nó

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

dách đưÿc ra mã IL. ĐiÃu đó có nghĩa là IL là ngơn ngă cÿa .NET và chß có CLR nhÁn biÁt đưÿc IL.

<b>Tính h°ãng đối t°ÿng </b>

ASP.NET là ngơn ngă lÁp trình hưáng đßi tưÿng sā dāng các ngơn ngă .NET. Nó cung cÃp bß các đßi tưÿng nhỏ và thực sự là mßt tầng làm viãt trên nguyên lý cÿa HTTP và HTML. Mã nguán cÿa chúng ta khơng đưÿc truy cÁp tồn bß các đßi tưÿng trong .NET Framework nhưng có thß khai thác tÃt cÁ các quy ưác cÿa mßt mơi trưßng OOP (Object Oriented Programming). Chúng ta có t¿o các láp, giao diãn, kÁ thÿa các láp ... Chúng ta có thß kißm sốt đưÿc các đßi tưÿng trong chương trình như hißn thá dă liãu và các sự kiãn cÿa đßi tưÿng.

<b> Biên dßch ASP.NET </b>

Mßt āng dāng ASP.NET ln ln đưÿc biên dách, nó khơng ch¿y bằng mã cÿa C# ho¿c Visual Basic mà không đưÿc biên dách trưác. Mßt āng dāng ASP.NET thực sự đưÿc biên dách thông qua 2 giai đo¿n:

- Giai đo¿n đầu tiên nhăng các

<i>mã (code) ta viÁt (C#, Visual </i>

Basic ho¿c ngôn ngă .NET khác) đưÿc dách bái

<b>Microsoft Intermediate </b>

<i><b>Language (MSIL). Giai đo¿n </b></i>

dách này đưÿc dách tự đßng khi trang wed đầu tiên yêu cầu. Chúng ta có thß thực hiãn dách trưác. Các tÁp tin đưÿc dách thành mã IL

<i>(Intermediate Language Code). </i>

- Giai đo¿n tiÁp theo đưÿc dách trưác khi trang Web đưÿc thực thi. T¿i giai đo¿n này

<i>mã IL đưÿc dách thành bÁn mã máy (Native Machine Code). Giai đo¿n này đưÿc gọi </i>

<i><b>là Just-In-Time (JIT). </b></i>

<b>Hình 1.1: Ki¿n trúc .Net Framework </b>

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

Khía c¿nh quan trọng nhÃt cÿa cơng cā ASP.NET là nó ch¿y trong mơi trưßng thßi

<i><b>gian thực (Runtime) cÿa CLR (Common Language Runtime). CLR là máy Áo (virtual </b></i>

<i>machine) </i>trong Microsoft .NET, do có ngơn ngă trung gian IL nên khi phát trißn āng dāng trên .NET, chúng ta khơng bá phā thc vào thiÁt bá, có nghĩa là theo Microsoft nói thì āng dāng .NET có thß ch¿y trên bÃt kỳ thiÁt bá nào có .NET Framework. TÃt cÁ các namespace, các āng dāng, các láp trong bß .NET Framework đưÿc gọi tắt là bß quÁn lý mã. CLR cũng cung cÃp các dách vā quan trọng khác như:

- QuÁn lý bß nhá - Thu nh¿t rác - QuÁn lý các tuyÁn - Xā lý ngo¿i lã - An tồn

<b> Dß dàng triÃn khai và c¿u hình </b>

Mọi sự cài đ¿t .NET Framework đÃu cung cÃp các láp như nhau. Đß trißn khai āng dāng ASP.NET chúng ta chß cần sao chép các tÁp tin vào thư māc Áo trên máy chÿ (server) và máy chß chß cần có .NET Framework.

Viãc cÃu hình dá dàng đơn giÁn khơng phā thc vào IIS (Internet Information

<i>Services). C</i><b>Ãu hình trong ASP.NET đưÿc đ¿t trong tÁp tin web.config. TÁp tin </b>

web.config đưÿc đß cùng vái thư mực chāa trang web cÿa chúng ta. TÁp tin web.config khơng bao giß bá khóa, chúng ta có thß truy cÁp bÃt kỳ lúc nào, viãc sāa tÁp tin này hồn tồn dá d¿ng vì chúng đưÿc lưu dưái d¿ng XML.

Microsoft phát hành ASP.NET vào ngày 19 tháng 11 năm 2007 cùng vái Visual Stutio 2008. Đây là bưác tiÁn hóa tÿ ASP.NET 2.0 tái ASP.NET 4.5. NÁu chúng ta đang sā dāng ASP.NET 2.0 đß sā dāng ASP.NET 4.5 chß cần cài đ¿t thêm các tính năng mái cÿa ASP.NET 4.5. Trong phần này ta s¿ giái thiãu mßt sß tính năng mái trong ASP.NET 4.5

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

<b>Đßc và ghi b¿t đßng bá các đối t°ÿng HTTP Request và Response </b>

ASP.NET 4 giái thiÁu khÁ năng đọc mßt thực thß HTTP request như là mßt stream bằng cách sā dāng phương thāc HttpRequest.GetBufferlessInputStream. Phương thāc này cung cÃp khÁ năng truy xt stream cho thực thß request, nhưng nó đưÿc thực thi đáng bß, và như vÁy nó s¿ làm ngh¿n thread vì phÁi thực thi viãc đọc stream.

ASP.NET 4.5 hỗ trÿ khÁ năng đọc stream bÃt đáng bß trên thực thß HTTP request, và khÁ năng flush bÃt đáng bß. ASP.NET 4.5 cũng giúp cho b¿n có khÁ năng tăng gÃp đơi buffer cho mßt thực thß HTTP request, điÃu đó giúp cho viãc tích hÿp dá dàng vái các các downstream HTTP handlers như là các trang .aspx và các ASP.NET MVC controllers.

<b>1.2.1.1 Các cÁi ti¿n cho viác quÁn lý HttpRequest </b>

Stream đưÿc tham chiÁu bái HttpRequest.GetBufferlessInputStream trong ASP.NET 4.5 hỗ trÿ các phương thāc đọc đáng bß và bÃt đáng bß. Đßi tưÿng Stream đưÿc trÁ và tÿ phương thāc GetBufferlessInputStream nay đã cài đ¿t cho cÁ hai phương thāc BeginRead và EndRead. Các phương thāc bÃt đáng bß cÿa Stream giúp b¿n đọc bÃt đáng bß thực thß Request theo tÿng chunks (tÿng phần nhỏ), trong khi đó ASP.NET s¿ giÁi phóng thread hiãn t¿i đßi vái mỗi vịng l¿p cÿa viãc đọc bÃt đáng bß.

ASP.NET cũng thêm vào mßt phương thực mái cho viãc đọc thực thß request theo cách đọc sā dāng bß đãm là HttpRequest.GetBufferedInputStream. Phương thāc n¿p cháng mái này cũng gißng vái phương thāc GetBufferlessInputStream, hỗ trÿ các phương thāc đọc đáng bß l¿n bÃt đáng bß. Tuy nhiên, khi GetBufferedInputStream đọc, nó sao chép tuyên các bytes cÿa thực thß request vào trong bß đãm nßi vi cÿa ASP.NET do đó các downstream modules và các handlers v¿n có thß truy xt vào đßi tưÿng request. Ví dā, nÁu mßt sß mã upstream đang nằm trong đưßng ßng (pipeline) đã đọc thực thß request sā dāng phương thāc GetBufferedInputStream, b¿n v¿n có thß sā dāng HttpRequest.Form ho¿c HttpRequest.Files. ĐiÃu này giúp cho b¿n có thß xā lý bÃt đßng bß đÁn request (ví dā như vÿa streaming mßt tÁp tin kích thưác lán đÁn CSDL), nhưng mà v¿n tiÁp tāc ch¿y đưÿc các trang .aspx và controllers.

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

<b>1.2.1.2 Ghi dă liáu b¿t đßng bá lên đối t°ÿng response </b>

Gái các response đÁn trình HTTP khách có thß làm tßn kém thßi gian khi client á quá xa ho¿c có kÁt nßi băng thơng hÁp. Bình thưßng thì ASP.NET s¿ trun các bytes trÁ và sau đó gọi lãnh gái bß đãm nói trên vào thßi đißm kÁt thúc xā lý request.

NÁu nßi dung trÁ và (đưÿc buffer) là lán (ví dā như gái và mßt tÁp tin lán cho client), b¿n phÁi l¿p l¿i viãc gọi HttpResponse.Fush đß gái và client và giă māc sā dāng bß nhá nằm trong tầm kißm sốt. Tuy nhiên, Flush là mßt lßi gọi đáng bß, nên viãc gọi đi gọi l¿i Flush s¿ tiêu tßn nhiÃu thßi gian.

ASP.NET 4.5 đã có thêm sự hỗ trÿ cho viãc ghi dă liãu bÃt đáng bß bằng các phương thāc BeginFlush và EndFlush cÿa đßi tưÿng HttpResponse. Sā dāng các phương thāc này s¿ giúp b¿n t¿o đưÿc các module bÃt đáng bß và các hanlder bÃt đßng bß mà chúng s¿ gái dă liãu liên tāc và client mà không làm chÁm các thread cÿa hã điÃu hành. Giăa các lßi gọi BeginFlush và EndFlush, ASP.NET giÁi phóng thread hiãn t¿i. Khi sđó nó s¿ giÁm bát lưÿng các thread cần phÁi chß hỗ trÿ các lưÿt tÁi và tßn nhiÃu thßi gian.

<b> Hß trÿ cho các các module và handler b¿t đßng bá </b>

<b>Task-Based Asynchronous Modules and Handlers) </b>

NÃn tÁng .NET 4 đã giái thiãu đÁn khái niãm lÁp trình bÃt đáng bß gọi là task. Các task đưÿc đ¿i dián bái kißu dă liãu Task và các kißu liên quan có trong namespace System.Threading.Tasks. NÃn tÁng .NET 4.5 tiÁp tāc cÁi tiÁn và giúp cho viãc làm viãc vái các đßi tưÿng Task trá nên đơn giÁn hơn. Vái .NET 4.5, trình biên dách hỗ trÿ hai tÿ khóa mái đó là await và async. Tÿ khóa await giúp xác đánh mßt đo¿n mã lãnh phÁi chß đÿi bÃt đáng bß đÁn khi mßt đo¿n code khác thực thi xong. Cịn tÿ khóa async thì l¿i là chß d¿n rằng b¿n có thß sā dāng các phương thāc có tÿ khóa đó như là các phương thāc bÃt đáng bß d¿ng task-based.

Sự kÁt hÿp giăa hai tÿ khóa await, async và đßi tưÿng Task giúp cho b¿n có thß dá dàng viÁt mã bÃt đáng bß trong .NET 4.5. ASP.NET 4.5 hỗ trÿ bằng các APIs giúp cho b¿n có thß viÁt các HTTP modules và các HTTP handlers bÃt đáng bß sā dāng các cÁi tiÁn cÿa trình biên dách.

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<b>1.2.2.1 Các module HTTP b¿t đßng bá </b>

GiÁ sā b¿n mn thực hiãn cơng viãc bÃt đáng bß vái mßt phương thāc trÁ và đßi tưÿng Task. Mã ví dā sau đây đánh mßt phương thāc bÃt đáng bß mà nó thực hiãn mßt lßi gọi bÃt đáng bß đß tÁi và trang nhà cÿa Microsoft.

Đó là tÃt cÁ nhăng gì b¿n cần viÁt và nÃn tÁng .NET s¿ tự đßng quÁn lý call stack trong khi chß đÿi viãc download thực hiãn xong, cũng như phāc hái call stack khi viãc download hồn thành.

Bây giß giÁ như b¿n mußn sā dāng phương thāc bÃt đáng bß trong mßt ASP.NET HTTP module. ASP.NET 4.5 có mßt phương thāc trÿ giúp

(EventHandlerTaskAsyncHelper) và mßt kißu dă liãu delegate mái (TaskEventHandler) mà nhá đó b¿n có thß dá dàng tích hÿp các phương thāc bÃt đáng bß d¿ng task-based vái mơ thāc lÁp trình bÃt đßng bß đưÿc thực thi bái ASP.NET pipeline. Ví dā dưái đây cho thÃy cách thực hiãn:

<b>1.2.2.2 Các Http handler b¿t đßng bá </b>

Cách tiÁp cÁn truyÃn thßng đß viÁt các handler bÃt đáng bß trong ASP.NET chính là cài đ¿t interface IHttpAsyncHandler. ASP.NET 4.5 giái thiãu kißu bÃt đáng bß

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

HttpTaskAsyncHandler mà b¿n có thß kÁ thÿa, và s¿ giúp viãc xây dựng các handler bÃt đáng bß dá dàng hơn.

Kißu HttpTaskAsyncHandler là trÿu tưÿng và yêu cầu b¿n phÁi quá tÁi phương thāc ProcessRequestAsync. ASP.NET s¿ cháu trách nhiãm và viãc tích hÿp dÃu hiãu d¿ng Task-based đưÿc ProcessRequestAsync vái mơ hình lÁp trình bÃt đáng bß cũ đưÿc sā dāng bái ASP.NET pipeline.

Ví dā dưái đây chß d¿n cho b¿n cách sā dāng Task và tÿ khóa await như là mßt phần cÿa viãc cài đ¿t mßt HTTP handler bÃt đáng bß

<b>Các tính nng mãi kiÃm tra tính hÿp lá đối vãi Request </b>

ASP.NET m¿c đánh thực hiãn viãc kißm tra tính hÿp lã đßi vái request, nó s¿ kißm tra các request đß tìm các thẻ ho¿c script trong các trưßng, header, cookies… NÁu như nó phát hiãn đưÿc điÃu gì bÃt hÿp lã, ASP.NET s¿ ném ngo¿i lã. Hành vi này là tuyÁn phòng ngÿa đầu tiên ddooois vái lßi tÃn cơng cross-site scripting attack.

ASP.NET 4.5 giúp cho viãc đọc các dă liãu chưa đưÿc kißm tra dá dàng hơn. ASP.NET 4.5 cũng m¿c đánh tích hÿp thư viãn AntiXSS.

Các lÁp trình viên thưßng u cầu cho phép đưÿc tuyef chọn tắt viãc kißm tra hÿp lã đßi vái request trong các āng dāng cÿa họ. Ví dā như, nÁu āng dāng cÿa b¿n là mßt dián đàn, b¿n s¿ mußn cho phép ngưßi dùng gái lên các bài viÁt theo đánh d¿ng

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

HTML nhưng v¿n đÁm bÁo rằng viãc kißm tra tính hÿp lã s¿ đưÿc thực hiãn á nhăng nơi còn l¿i.

ASP.NET 4.5 giái thiãu hai tính năng cho phép b¿n dá dàng làm viãc vái các dă liãu nhÁp khơng đưÿc kißm tra: làm chÁm viãc kißm tra tính hÿp lã cÿa request và truy xuÃt vào dă liãu chưa đưÿc kißm tra cÿa request.

<b>1.2.3.1 Làm chÃm (<lazy=) viác kiÃm tra tính hÿp lá cÿa request </b>

Trong ASP.NET 4.5, tÃt cÁ các dă liãu request đÃu phÁi đưÿc kißm tra tính hÿp lã. Tuy nhiên b¿n có thß cÃu hình āng dāng cho phép hỗn kißm tra tính hÿp lã cho đÁn khi b¿n truy xuÃt xong dă liãu cÿa request. B¿n có thß cÃu hình āng dāng đß sā dāng kißm tra hÿp lã chÁm (deferred validation) trong Web.config bằng cách gán giá trá cho thc tính requestValidationMode trong thẻ httpRuntime là 4.5 như dưái đây:

<i><httpRuntime requestValidationMode = "4.5"... /> </i>

Khi requestValidationMode đưÿc quy đánh là 4.5, viãc kißm tra tính hÿp lã cho request chß thực hiãn cho tÿng giá trá cā thß khi và chß khi mã lãnh cÿa b¿n truy xuÃt giá trá đó. Ví dā như khi b¿n lÃy giá trá Request.Form["forum_post"], chß có phần tā đó đưÿc kißm tra tính hÿp lã mà thôi. Các phần tā khác trong tÁp hÿp Form s¿ khơng đưÿc kißm tra. Trong phiên bÁn trưác cÿa ASP.NET, kißm tra hÿp lã cho request s¿ đưÿc thực hiãn đßi vái cÁ tÁp hÿp Form khi có bÃt kỳ phần tā nào cÿa tÁp hÿp Form đưÿc truy xuÃt. Tính năng mái này giúp cho các thành phần cÿa āng dāng chß khi truy xuÃt phần tā nó cần s¿ khơng kích ho¿t viãc kißm tra tính hÿp lã dă liãu cÿa các phần tā khác.

<b>1.2.3.2 Hß trÿ có các request ch°a đ°ÿc kiÃm tra tính hÿp lá </b>

Kißm tra hÿp lã dă liãu cho request <trá= thực ra chưa giÁi quyÁt đưÿc nhu cầu cần bỏ qua viãc kißm tra hÿp lã dă liãu cho mßt phần tā nào đó cÿa request. Lßi gọi

Request.Form[<forum_post=] v¿n kích ho¿t viãc kißm tra hÿp lã cho giá trá cÿa phần tā đó. Tuy nhiên, thực ra b¿n v¿n cần đọc đưÿc phần tā này mà khơng kích ho¿t viãc kißm tra tính hÿp lã, bái vì b¿n mußn chÃp nhÁn mã đánh dÃu đưÿc lưu trong trưßng đó.

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

Đß chÃp nhÁn viãc bỏ qua kißm tra tính hÿp lã, ASP.NET 4.5 bây giß đã hỗ trÿ cho viãc bỏ qua kißm tra hÿp lã bằng cách cung cÃp mßt thc tÁp hÿp có tên là

Unvalidated trong láp HttpRequest. Chúng ta có thß sā dāng tÁp hÿp này đß truy xuÃt đÁn tÃt cÁ các giá trá thông dā như Form, QueryString, Cookies, và Url.

Sā dāng cùng vái ví dā trên, đß có thß đọc dă liãu chưa đưÿc kißm tra hÿp lã, b¿n cần phÁi cÃu hình āng dāng đß sā dāng cơ chÁ kißm tra tính hÿp lã cÿa request mái:

<httpRuntime ... encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

Dưái đây là các thành phần cÿa thư viãn AntiXSS đưÿc tích hÿp vào ASP.NET 4.5:  HtmlEncode, HtmlFormUrlEncode, and HtmlAttributeEncode

 XmlAttributeEncode and XmlEncode

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

 UrlEncode và UrlPathEncode  CssEncode

<b> Hß trÿ cho giao thāc WebSockets </b>

Giao thāc WebSockets là mßt giao thāc m¿ng chuẩn nhằm đánh nghĩa cách thiÁt lÁp các kÁt nßi hai chiÃu thßi gian thực giăa client và server thông qua giao thāc HTTP. Microsoft đã làm viãc vái các chuẩn IETF và W3C đß giúp đánh nghĩa giao thāc này. Giao thāc WebSocket đưÿc hỗ trÿ bái bÃt kỳ client nào (khơng chß là browsers).

Giao thāc WebSockets giúp cho viãc gái nhÁn dă liãu trong thßi gian dài giăa client và server dá dàng hơn. Ví dā, viãc xây dựng mßt āng dāng chat s¿ dá dàng hơn nhiÃu bái vì b¿n có thß thiÁp lÁp mßt kÁt nßi <thßi gian dài= giăa client và server mà không phÁi mÃt công giÁ lÁp các tính năng cÿa mßt socker như trưác đây năa.

ASP.NET 4.5 và IIS 8 bây giß đã hỗ trÿ WebSockets, cho phép các lÁp trình viên có thß sā dāng APIs đß đọc và ghi bÃt đáng bß chuỗi và dă liãu nhá phân trên mßt đßi tưÿng WebSockets. ASP.NET 4.5 đã có mßt namespace mái là

System.Web.WebSockets chāa các kißu dành cho viãc lÁp trình vái giao thāc WebSockets.

Trình dut s¿ thiÁt lÁp mßt kÁt nßi WebSockets đß t¿o mßt đßi tưÿng DOM là WebSocket mà đßi tưÿng này trỏ đÁn mßt URL cÿa āng dāng ASP.NET, như dưái đây:

socket = new WebSocket("ws://contoso.com/MyWebSocketApplication.ashx"); B¿n có thß t¿o các endpoint trong ASP.NET bầng bÃt cā module ho¿c handler nào. Vái ví dā trên thì chúng ta sā dāng tÁp tin .ashx, bái vì tÁp tin .ashx là cách đß có thß thiÁt lÁp mßt hanlder nhanh chóng.

Đß áp dāng giao thāc WebSockets, āng dāng ASP.NET chÃp nhÁn mßt request d¿ng WebSockets bằng cách xác đánh rằng request đó nên đưÿc nâng cÃp tÿ mßt request d¿ng HTTP GET thành request d¿ng WebSockets. Xem ví dā dưái:

<i>HttpContext.Current.AcceptWebSocketRequest(// WebSocket delegate á đây) </i>

Phương thāc AcceptWebSocketRequest chÃp nhÁt tham sß là mßt delegate bái vì ASP.NET s¿ bung HTTP request và chuyßn quyÃn điÃu khißn đÁn delegate đó. Cách

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

tiÁp cÁn này khá gißng vái cách b¿n dùng System.Threading.Thread, á đó b¿n s¿ đánh nghĩa mßt thread-start delegate mà mọi cơng viãc s¿ đưÿc thực hiãn bên trong

delegate đó.

Sau khi ASP.NET và client đã hoàn thành xong viãc thiÁt lÁp kÁt nßi thơng qua giao thāc WebSockets, ASP.NET gọi delegate cÿa b¿n và āng dāng WebSockets s¿ bắt đầu ch¿y. Mã lãnh dưái đây mih ho¿t mã cÿa mßt āng dāng sā dāng tính năng hỗ trÿ WebSockets cÿa ASP.NET

Tÿ khóa await và các thao tác d¿ng task-based hồn tồn phù hÿp đß xây dựng các āng dāng WebSockets. Mã lãnh dưái đây cho thÃy mßt request d¿ng WebSockets ch¿y hồn tồn bÃt đáng bß bên trong Asp.NET. Āng dāng này chß đÿi thơng điãp mßt cách bÃt đáng bß tÿ client bằng cách gọi phương thāc socket.ReceiveAsync. Tương tự, b¿n có thß gái thơng điãp bÃt đáng bß đÁn client bằng cách gọi await socket.SendAsync.

à trình duyãt, āng dāng khách nhÁn đưÿc các thông điãp WebSockets á hàm

onmesssage. Đß gái mßt thơng điãp tÿ trình dut, b¿n có thß gọi phương thưng thāc send cÿa đßi tưÿng DOM WebSocktet như dưái đây:

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

<i>// Receive a string message from the server. socket.onmessage = function(msg) </i>

<i> { </i>

<i> document.getElementById("serverData").innerHTML = msg.data; }; </i>

<i> // Send a string message from the browser. </i>

<i> socket.send(document.getElementById("msgText")); </i>

<b> Bundling và Minification </b>

Bundling (gói, bó l¿i) cho phép b¿n gßp nhiÃu tÁp tin JavaScript và CSS thành mßt gói và có thß xem như là mßt tÁp tin duy nhÃt. Minification là viãc làm giÁm kích thưác các tÁp tin JavaScript và CSS bằng cách xóa các ký tự trắng thÿa và các ký tự khơng cần thiÁt. Các tính năng này ho¿t đßng vái các āng dāng Web Forms, ASP.NET MVC, và Web Pages.

<b> CÁi thián tốc đá cho Web Hosting </b>

.NET Framework 4.5 và Windows 8 giái thiãu các tính năng cho phép b¿n tăng tßc rõ rãt đßi vái website. Trong đó thßi gian khái đßng và dung lưÿng bß nhá sā dāng cÿa các web hosting sā dāng ASP.NET đưÿc giÁm đÁn 35%.

<b> T¿o dą án mãi </b>

- Chúng ta kích ho¿t āng dāng Visual Studio (h1.2).

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<b>Hình 1.2: T¿o mãi dą án </b>

- <b>NÁu chọn New Project xuÃt hiãn hßp hßi tho¿i New Project (h1.3) </b>

- Trong Project Type:

 Visual Basic → Web nÁu chọn Visual Basic là ngôn ngă viÁt āng dāng.  Visual C# → Web nÁu chọn C# là ngôn ngă viÁt āng dāng.

- Trong Templates chọn ASP.NET Web Application,. - Trong Name đ¿t tên cho Project, tên do ta đ¿t. - Trong Location là thư māc chāa Project.

 NÁu chọn New Web Site xuÃt hiãn hßp hßi tho¿i New Project sau. - Trong Languge:

 Visual Basic → Web nÁu chọn Visual Basic là ngôn ngă viÁt āng dāng.  Visual C# → Web nÁu chọn C# là ngôn ngă viÁt āng dāng.

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

- Trong Templates chọn ASP.NET Web Application. - Trong Location chọn tên và thư mực chāa Project.

<b>Hình 1.3: Chßn āng dāng ASP.NET Web Application </b>

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

<b> Ví dā </b>

<b>Hình 1.4: T¿o dą án d¿ng ASP.NET Web Application </b>

Ví dā ta t¿o mßt dự án có tên là BigSchool, đ¿t t¿i ã đĩa C, chọn ngôn ngă chọn là C# (h1.5) sau đó bÃm OK. TiÁp theo, chọn āng dāng Web MVC

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<b>Hình 1.5: BigSchool project </b>

TiÁp theo nhÃn vào Change Authentication:

<b>Individual User Accounts: Dự án đưÿc t¿o ra là lo¿i dự án Web bao gám cÁ phần </b>

security

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

<b>No Authentication: Dự án đưÿc t¿o ra là dự án Web không bao gám phần security Windows Authentication: Dự án đưÿc t¿o ra là lo¿i dự án Web bao gám cÁ phần </b>

security nhưng tài khoÁn đưÿc quÁn lý trên m¿ng nßi bß.

<b>Work or School Accounts: Dự án đưÿc t¿o ra là lo¿i dự án Web sā dāng tài khoÁn </b>

<i><b>- View: View hi</b>Ãn thị các thông tin cho ng°ời dùng của ứng dụng và đ°ợc giao nhiệm vụ cho việc nhận các dữ liệu vào từ ng°ời dùng, gửi đi các yêu cầu đ¿n bộ điÁu khiÃn, sau đó là nhận lại các phản hồi từ bộ điÁu khiÃn và hiÃn k¿t quả cho ng°ời dùng. Các trang HTML, JSP, các th° viện thà và các tập tin nguồn là một phần của thành phần View. </i>

<i><b>- Controller: Controller là t</b>ầng trung gian giữa Model và View. Controller đ°ợc giao nhiệm vụ nhận các yêu cầu từ phía máy khách. Một yêu cầu đ°ợc nhận từ máy khách đ°ợc thực hiện bởi một chức năng logic thích hợp từ thành phần Model và sau đó sinh ra các k¿t quả cho ng°ời dùng và đ°ợc thành phần View hiÃn thị. ActionServlet, Action, ActionForm và struts-config.xml là các phần của Controller. </i>

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

<b>BÀI TÂP </b>

<b>Câu 1: Thao tác </b>

- Làm quen vái mơi trưßng Microsoft Visual Studio - Xây dựng āng dāng web đơn giÁn WebCalculator

 T¿o Project WebApplication  ThiÁt kÁ giao diãn

 ViÁt mã lãnh xā lý đơn giÁn

 Ch¿y, Debug và sāa lỗi chương trình

<b>Câu 2: Mơi trưßng Microsoft Visual Studio 2010 ho¿c mái hơn </b>

- Mßt sß khái niãm cơ sá  Form

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

 Properties

 Solution Explorer  Class View

 Xem màn hình design form: Shift-F7

 Chuyßn đãi tÿ Design sang Code và ngưÿc l¿i: F7

 Ch¿y chương trình: Ctrl-F5 (ho¿c F5 vái chÁ đß Debug)

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

<b>Bài 2 CÁC LâP SĀ DĀNG TRONG ASP.NET </b>

Học xong bài này ngưßi học s¿ nắm đưÿc các nßi dung sau.

- <i>HiÃu đ°ợc các khái niệm vÁ đối t°ợng Http Request, Http Response, Http Server, Session, Cookie. </i>

- <i>Bi¿t vận dụng thành thạo những đối t°ợng này trong bài lập trình liên quan. </i>

<b> Giãi thiáu </b>

<b>Request là mßt thß hiãn cÿa láp HttpRequest. Trình duyãt dùng đßi tưÿng Request đß gāi thơng tin cần thiÁt tái Server. </b>

<b>Hình 2.1: Ng°ời dùng gởi yêu cÁu đ¿n server </b>

<b>Đßi tưÿng Request nhÁn tÃt cÁ giá trá mà trình dut cÿa client gái đÁn server thơng qua HTTP Request. </b>

Request đ¿i diãn cho Client khi yêu cầu trang Web, Server s¿ dùng vÿa Response vÿa Request đß đáp āng u cầu hay địi hỏi thơng tin tÿ Client.

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

<b>2.1.2.2 TÃp hÿp Form - Form collection </b>

Form collection đưÿc sā dāng đß tÁp hÿp dă liãu đưÿc chāa trong các phần tā cÿa

<b>form chuyßn tÿ client đÁn server bằng phương thāc POST. </b>

<b> Giãi thiáu </b>

<b>Http Response đưÿc dùng đß truyÃn dă liãu máy chÿ web đÁn trình duyãt web. </b>

<b>Hình 2.2: Ví dā Response </b>

<b> Các thc tính/ph°¢ng thāc </b>

- <i><b>Thc tính Buffer: có 2 giá trá true và false quy đánh cách truyÃn tÁi dă liãu: Cú pháp: Response.Buffer=true/false; </b></i>

<b> true: Hồn tÃt cơng viãc và gāi mßt lần  false: Thực hiãn xong đÁn đâu thì gāi đÁn đó </b>

<b>- isClientConnected: Kißm tra máy client có u cầu kÁt nßi đÁn server, kÁt quÁ trÁ </b>

và giá trá true/false

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

<b>- Cookies: đưÿc sā dāng đß ghi Cookies. Cookies đưÿc thß hiãn trong ASP.NET là láp </b>

<i><b>Httpcookies </b></i>

<b>- Clear(): Xóa vùng t¿m </b>

<i><b>Cú pháp: Response.Clear() </b></i>

<b>- End(): KÁt thúc tiÁn trình xā lý trên Server và đẩy dă liãu tái Client </b>

<i><b>- Flush(): KÁt thúc tiÁn trình, quay l¿i thực hiãn tiÁp </b></i>

<b>- Redirect(url) : dùng đß chuyßn client sang mßt URL khác </b>

<b>- Redirect(url, Boolean): dùng đß chuyßn client sang mßt URL khác, trong đó: </b>

 <b>NÁu Boolean=true thì khi thực hiãn xong, lãnh Response s¿ thực hiãn tiÁp </b>

 <i><b>NÁu Boolean =false thì khi thực hiãn xong, lãnh Response s¿ dÿng </b></i>

<b>- Write(<Data=): Ghi dă liãu ra trang web Ví dā: Response.Write(<Hello world=); </b>

- <b>Đối t°ÿng Server cung cÃp các phương thāc giúp chuyßn điÃu khißn giăa các trang </b>

vái nhau, lÃy thông tin và mã lỗi, encode, … - Các thc tính:

<b> MachineName: tên server </b>

<b> ScriptTimeout</b>: thiÁt lÁp thßi gian xā lý tßi đa 1 tÁp tin Ví dā: Server.ScriptTimeout=100s //thiÁt lÁp thgian m¿c đánh

<b>- HtmlEncode(str): dùng đß mã hoá HTML thành chuỗi </b>

<i>Cú pháp: </i>Khi mã hố chuỗi HTML sang chuỗi bình thưßng nÁu g¿p các ký tự như sau s¿ chuyßn sang ký tự tương āng:

 <b>Ký tự < chuyßn thành &lt; </b>

 <b>Ký tự > chuyßn thành &gt; </b>

 <b>Ký tự & chuyßn thành &amp; </b>

</div><span class="text_page_counter">Trang 32</span><div class="page_container" data-page="32">

 <b>DÃu nháy đơi < chun thành &quot; </b>

<b>- HtmlDecode(strcontent):giÁi mã các thẻ HTML </b>

Ví dā: Str=<n&gt;5=; Str=server.HtmlDecode(str); // kÁt quÁ n>5

<b>- Transfer: gāi tÃt cÁ thông tin mà nó đã xā lý tÿ trang ASP hiãn hành sang trang </b>

ASP khác

<i>Cú pháp: Tham sß path là đưßng d¿n cÿa tÁp tin ASP cần chuyßn iu khiòn. </i>

- <b>PhÂng thc URLEncode: Tng t như phương thāc HTMLEncode, phương thāc </b>

URLEcode dùng đß mã hoá URL thành chuỗi

<i>Cú pháp: </i>Khi mã hoá chuỗi URL sang chuỗi bình thưßng nÁu g¿p các ký tự như sau, s¿ chuyßn sang ký tự tương āng:

 <b>Ký tự khoÁng trÅng chuyßn thành dÃu + </b>

 <b>Ký tự không thuác ký tą chă và số s¿ chuyßn thành số hexadecimal. </b>

<b> Giãi thiáu Cookie và Session </b>

<b>Đißm chung giăa Cookie và Session là viãc lưu tră và qn lý mßt sß thơng tin liên </b>

quan đÁn ngưßi dùng website, nhăng thơng tin này cần dùng trên nhiÃu trang web cÿa cùng hã thßng website.

Thơng tin đưÿc lưu tră vái khng thßi gian quy đánh trưác, và có thß tự hÿy khi hÁt

<b>thßi gian cho phép. Cookie và Session thuÁn tiãn cho viãc gāi thông tin qua l¿i giăa </b>

các trang web mà không cần dùng qua phương thāc POST/GET… giÁm thißu viãc phát sinh thêm biÁn.

<b>Āng dāng thưßng thÃy cÿa Cookie và Session là lưu tră thông tin đăng nhÁp cÿa </b>

ngưßi dùng, xác đánh thßi đißm đăng nhÁp, thoát khỏi website … KÁt hÿp vái thao tác

<b>Redirect đß có thß qn lý, ch¿n truy cÁp tÿ ngưßi dùng khi chưa đăng nhâp… </b>

</div><span class="text_page_counter">Trang 33</span><div class="page_container" data-page="33">

<b> Cookie </b>

<b>2.4.2.1 Đặc điÃm cookie </b>

<b>Cookie đưÿc lưu tră trên trình dut, khi ngưßi dùng sā dāng trình dut truy cÁp </b>

vào mßt website nào đó thì server s¿ gāi cookie và trình duyãt và lưu tră trực tiÁp trên

<i>máy ngưßi dùng (client). </i>

Cookie s¿ khác nhau cho mỗi lo¿i trình dut, IP ngưßi dùng cũng như server cÿa website. Cookie đưÿc t¿o ra bái website và gái tái browser, do vÁy 2 website khác nhau (cho dù cùng host trên 1 server) s¿ có 2 cookie khác nhau gái tái trình duyãt .

Mỗi trình dut s¿ có cách qn lý và lưu tră cookie theo cách riêng cÿa mình, cho nên 2 trình duyãt cùng truy cÁp vào 1 website s¿ nhÁn đưÿc 2 cookie khác nhau.

Trong ASP.NET các phương thāc, thc tính liên quan đÁn viãc xā lý Cookie đưÿc lưu tră trong class HttpCookie. Các thc tính thưßng dùng trong Cookie:

<b>- Name: Tên Cookie. </b>

<b>- Domain: Tên miÃn cÿa Cookie lưu tră. </b>

<b>- Expires: Xác đánh thßi gian hiãu lực cÿa Cookie. - Value: Giá trá cÿa Cookie. </b>

<b>- HasKeys: Cho biÁt Cookie có tÁp giá trá con hay khơng. - Values: TÁp các giá trá cÿa Cookie. </b>

Mỗi lần có yêu cầu lên website, trình duyãt s¿ gāi cookie lên server, server s¿ có cơ chÁ <đọc= cookie và xā lý cho tác vā nào đó. Mỗi cookie đưÿc website gāi đÁn trình dut thưßng bao gám 3 thành phần chính sau:

- Đáa chß URL cÿa website mà trình duyãt nhÁn cookie - Thßi gian tán t¿i cÿa Cookie

- Giá trá lưu tră.

<b>2.4.2.2 Ph°¢ng thāc thao tác </b>

- Ghi Cookie:

</div><span class="text_page_counter">Trang 34</span><div class="page_container" data-page="34">

Thao tác trên Cookie có nhiÃu Subkey

<b>- Xóa Cookie: Viãc xóa Cookie thực chÃt là thao tác chßnh thßi gian hiãu lực và trưác </b>

thßi đißm hiãn t¿i so vái giß hã thßng.

<b> Session </b>

<b>2.4.3.1 Đặc điÃm </b>

Ta có thß chưa thực sự dùng cookie đß lưu tră Shoping Cart. Mßt cookie vÿa quá nhỏ và q đơn giÁn. Đß làm viãc ngồi giái h¿n cÿa Cookie, ASP.NET Framework hỗ trÿ mßt chāc năng mái đưÿc gọi là Session State. Gißng vái Cookie, Session lưu tră dă liãu trong ph¿m vi riêng vái tÿng ngưßi sā dāng. Nhưng khơng gißng vái Cookie,

<b>Session khơng giái h¿n dung lưÿng, nÁu ta cần lưu tră hàng Gigabyte dă liãu, hơn thÁ </b>

năa Session có thß đưa ra điÃu đßi tưÿng phāc t¿p hơn là chuỗi Text. Ta có thß lưu tră mßt vài đßi tưÿng trong Session. Ví dā ta có thß lưu tră mßt Dataset hay mßt Shoping Cart trong Session.

<b>2.4.3.2 Session trong ASP.NET </b>

Trong ASP.NET cũng như các cơng nghã lÁp trình web khác, Session đưÿc t¿o ra khi Client bắt đầu có yêu cầu gāi tái Server và s¿ kÁt thúc khi Client có thao tác hÿy Session ho¿c sau mßt thßi gian (đánh trưác) khơng có bÃt kỳ thao tác nào lên Server.

<b>Khi Session đưÿc t¿o đáng thßi phương thāc Session_OnStart() s¿ đưÿc thực thi và tương tự khi kÁt thúc Session phương thāc Session_OnEnd() s¿ đưÿc thực thi. </b>

</div><span class="text_page_counter">Trang 35</span><div class="page_container" data-page="35">

<b>2.4.3.3 Mát số ph°¢ng thāc thao tác trên session </b>

<i><b>- Timeout: Qui đánh khoÁng thßi gian (tính bằng phút) Web Server duy trì Session </b></i>

nÁu ngưßi dùng không gái yêu cầu nào và l¿i Server.

 Giá trá m¿c đánh cÿa Timeout là 20. NÁu khơng có u cầu nào kß tÿ lần u cầu cußi cùng sau mßt khoÁng thßi gian là <Timeout> phút, đßi tưÿng Session mà Web server cÃp cho lần làm viãc đó s¿ tự đßng đưÿc giÁi phóng.

 Nhăng yêu cầu sau đó, webserver coi như là mßt ngưßi dùng mái, và s¿ cÃp mßt đßi tưÿng Session mái.

Ví dā: ThiÁt lÁp thßi gian cho 1 phiên làm viãc cÿa user là 100 phút

<b>Session.TimeOut = 100; </b>

<i><b>Có thß thiÁt lÁp thc tính này trong tÁp tin Web.config </b></i>

<small><system.web> </small>

<small><sessionState timeout=<100= /> & </small>

<b>- SessionID: chāa ID cÿa session đang kích ho¿t, mỗi user đưÿc phân biãt bái </b>

sessionID gọi là mã phiên làm viãc.

<b>- Count: trÁ và sß session trong mßt āng dāng </b>

<b>- Abandon(): giÁi phóng vùng nhá đưÿc dùng đß duy trì đßi tưÿng Session trên Web </b>

Server ngay khi đưÿc gọi thực hiãn. Nhăng yêu cầu sau đó đưÿc Web server coi như là mßt ngưßi dùng mái.

<b>- Remove(<SessionName=): xoá dă liãu trên biÁn <VarSession= - RemoveAll(): Xoá dă liãu, nhưng sessionID v¿n tán t¿i </b>

- Cũng có thß dùng Session đß lưu các biÁn giá trá như Cookie

<i><b>Session[<nameVar=] = value; </b></i>

<b>TÓM TÄT </b>

</div><span class="text_page_counter">Trang 36</span><div class="page_container" data-page="36">

<i>Bài học này giới thiệu vÁ các đối t°ợng làm việc thông dụng và quan trọng trong kỹ thuật lập trình web là Request, Response, Cookie và Session. </i>

<i>Request là một thà hiện của lớp HttpRequest, Browser dùng Request object đà gửi thông tin cần thi¿t tới Server. Đối t°ợng Request nhận tất cả giá trị mà trình duyệt của client gởi đ¿n server thơng qua HTTP request. </i>

<i>Http Response đ°ợc sử dụng đà truyÁn dữ liệu webserver đ¿n webBrowser </i>

<i>Đối t°ợng Server cung cấp các ph°¡ng thức giúp chuyÃn điÁu khiÃn giữa các trang với nhau, lấy thông tin vÁ mã lỗi, encode, … </i>

<i>Cookie đ°ợc l°u trữ trên trình duyệt, khi ng°ời dùng sử dụng trình duyệt truy cập vào một website nào đó thì server sẽ gửi cookie vÁ trình duyệt và l°u trữ trực ti¿p trên máy ng°ời dùng (client). Cookie sẽ khác nhau cho mỗi loại trình duyệt, IP ng°ời dùng cũng nh° server của website. Cookie đ°ợc tạo ra bởi website và gởi tới browser, do vậy 2 website khác nhau (cho dù cùng host trên 1 server) sẽ có 2 cookie khác nhau gởi tới trình duyệt. Mỗi trình duyệt sẽ có cách quản lý và l°u trữ cookie theo cách riêng của mình, cho nên 2 trình duyệt cùng truy cập vào 1 website sẽ nhận đ°ợc 2 cookie khác nhau. </i>

<i>Giống với Cookie, Session l°u trữ dữ liệu trong phạm vi riêng với từng ng°ời sử dụng. Nh°ng không giống với Cookie, Session không giới hạn dung l°ợng, n¿u ta cần l°u trữ hàng Gigabyte dữ liệu, h¡n th¿ nữa Session có thà đ°a ra điÁu đối t°ợng phức tạp h¡n là chuỗi Text. Ta có thà l°u trữ một vài đối t°ợng trong Session. Session đ°ợc tạo ra khi Client bắt đầu có Requset gửi tới Server và sẽ k¿t thúc khi Client có thao tác hủy Session hoặc sau một thời gian (định tr°ớc) không có bất kỳ thao tác nào lên Server. </i>

</div><span class="text_page_counter">Trang 37</span><div class="page_container" data-page="37">

<b>BÀI TÂP </b>

Bài thực hành này ta s¿ sā dāng Visual Studio đß thiÁt kÁ web vái các trang nhÁp liãu, trun tham sß giăa các trang và hißn thá thơng tin chi tiÁt, ta có thß thực hiãn các cơng viãc này theo các bưác sau:

ThiÁt kÁ form như hình dưái, nhÃn vào nút Submit đß hißn thá màn hình mái hiãn các thơng tin đ¿t Hàng

</div><span class="text_page_counter">Trang 38</span><div class="page_container" data-page="38">

<b>Bài 3 TRUY CÂP DĂ LIàU </b>

Học xong bài này ngưßi học s¿ nắm đưÿc các nßi dung sau:

- <i>Khái niệm vÁ và ADO.NET, SqlDatasource, LinqDataSource, Linq và ph°¡ng pháp làm việc của từng đối t°ợng. </i>

- <i>Bi¿t vận dụng thành thạo những đối t°ợng này trong bài lập trình liên quan. </i>

Phần lán các āng dāng hiãn nay đÃu sā dāng cơ sá dă liãu. Có nhiÃu cách thāc truy

<b>cÁp dă liãu khác nhau trong các công nghã cÿa Microsoft như ADO, RDO, DAO, ODBC. </b>

Tuy nhiên tÿ khi .NET Framework ra đßi thì cơng nghã ADO.NET đã đưÿc tích hÿp,

<b>ADO.NET chāa các láp cho phép các āng dāng kÁt nßi vái các nguán dă liãu (connect </b>

<i>data sources), thực hiãn các lãnh (execute commands), quÁn lý dă liãu đã ngắt kÁt nßi (manage disconnected data). Vái ADO.NET, ngưßi lÁp trình có thß viÁt ít mã lãnh thao </i>

tác cơ sá dă liãu hơn so vái các công nghã trưác trong các āng dāng client-server ho¿c các āng dāng trên desktop.

M¿t khác, trong ASP.NET tÿ phiên bÁn .NET Framework 2.0 trá lên có thêm các thao

<b>tác vái cơ sá dă liãu mà không sā dāng ADO.NET như SqlDataSource, LINQ ho¿c Profiles. </b>

Ngoài ra các āng dāng truy cÁp dă liãu cÿa .NET Framework cịn có thß truy nhÁp

<i>vào các nguán dă liãu ngoài như tập tin, Stream, XML, Ajax, web services, WCF, data services. </i>

Trong bài học này, ta s¿ t¿o ra mßt Web site project thao tác vái cơ sá dă liãu, sā dāng Visual Studio 2008 t¿o mßt project Website, trong đó t¿o mßt cơ sá dă liãu tên là DB_TEST.MDF trong folder App_Data. (h3.1, h3.2), rái Sā dāng cơ sá dă liãu DB_TEST t¿o 2 table HangHoa và KhoHang.

</div><span class="text_page_counter">Trang 39</span><div class="page_container" data-page="39">

<b>Hình 3.1: Thêm Sql c¢ sở dă liáu tÿ dą án </b>

<b>Hình 3.2: Thi¿t k¿ bÁng </b>

<i>Sau đó, ta t¿o mßt chuỗi kÁt nßi (connection) trong tÁp tin cÃu hình web.config và </i>

<b>đ¿t tên là ConnectionString cho phép truy nhÁp vào cơ sá dă liãu. </b>

Nßi dung tÁp tin web.config:

<small> For more information on how to configure your ASP.NET application, please visit --></small>

<small><configuration> <configSections></small>

<small> <!-- For more information on Entity Framework configuration, visit --></small>

<small> <sectionname=<entityFramework=</small>

<small>type=<System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, </small>

</div><span class="text_page_counter">Trang 40</span><div class="page_container" data-page="40">

<small>EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089=</small>

<small>requirePermission=<false= /> </configSections></small>

<small> <connectionStrings></small>

<small> <addname=<DefaultConnection=providerName=<System.Data.SqlClient=</small>

<small>connectionString=<Data Source=(LocalDb)\v11.0;Initial 20131216190425;Integrated </small>

<small>Catalog=aspnet-WebSite2-Security=SSPI;AttachDBFilename=|DataDirectory|\database1.mdf= /> </connectionStrings></small>

<small> <system.web></small>

<small> <compilationdebug=<true=targetFramework=<4.5= /> <httpRuntimetargetFramework=<4.5= /></small>

<small> <authenticationmode=<Forms=></small>

<small> <formsloginUrl=<~/Account/Login=timeout=<2880=defaultUrl=<~/= /> </authentication></small>

<small> </system.web> <entityFramework></small>

<small> <defaultConnectionFactory</small>

<small>type=<System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework=> <parameters></small>

<small> <parametervalue=<v11.0= /> </parameters></small>

<small> </defaultConnectionFactory> </entityFramework></small>

<b>ADO.NET Data Providers cho phép truy nhÁp vào mßt cơ sá dă liãu cā thß, thực </b>

hiãn các câu lãnh SQL và nhÁn dă liãu. Data provider là chiÁc cầu nßi giăa āng dāng và nguán dă liãu.

Láp ADO.NET Data Provider bao gám các thành phần:

<b>- Connection: Thực hiãn kÁt nßi tái nguán cơ sá dă liãu; </b>

<b>- Command: Thực hiãn mßt câu lãnh SQL ho¿c mßt store procedures; DataReader: </b>

Chß đọc và nhÁn dă liãu tÿ mßt truy vÃn;

<b>- DataAdapter thực hiãn 2 nhiãm vā: </b>

 <b>ĐiÃn dă liãu nhÁn đưÿc vào mßt DataSet, </b>

 Có thß ghi nhÁn sự thay đãi dă liãu trong DataSet.

</div>

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×