Giới thiệu về ASP.NET và ASP.NET Core
- 10-11-2024
- Toanngo92
- 0 Comments
Mục lục
1.1 Giới thiệu về ASP.NET
ASP.NET là một công nghệ dựa trên nền tảng .NET và được sử dụng để phát triển các ứng dụng web động. Để hỗ trợ phát triển ứng dụng web, ASP.NET cung cấp các framework web khác nhau, như thể hiện trong Hình 1.1. Các framework này bao gồm các công cụ giúp lập trình viên xây dựng và triển khai các ứng dụng web một cách hiệu quả.
Mỗi framework phù hợp với một phong cách phát triển cụ thể và việc lựa chọn framework phụ thuộc vào sự kết hợp giữa kiến thức lập trình và yêu cầu của dự án. Phiên bản mã nguồn mở của ASP.NET, ASP.NET Core, có khả năng chạy trên các hệ điều hành macOS, Linux, và Windows. ASP.NET Core lần đầu tiên được phát hành vào năm 2016 như một phiên bản tái thiết kế của ASP.NET ban đầu, vốn chỉ dành riêng cho hệ điều hành Windows.
1.1.2 Lịch sử của ASP.NET
Năm 1996, Microsoft giới thiệu một công nghệ mới có tên là ASP (Active Server Pages) để hỗ trợ các nhà phát triển tạo ra các ứng dụng web. Thời điểm đó, một ứng dụng ASP chứa các trang web sử dụng VBScript hoặc các đoạn mã phía máy chủ khác kết nối đến máy chủ. Khi một yêu cầu được gửi đến, các đoạn mã này sẽ được thực thi và tạo ra mã HTML tương ứng.
Active Server Pages (ASP)
ASP được phát triển để tạo nội dung web có thể thay đổi dựa trên sự tương tác của người dùng. Khi người dùng yêu cầu một trang ASP, mã được chuyển từ máy chủ chứa trang đó. Máy chủ sau đó phân tích dữ liệu và trả về nội dung cho người dùng, giúp nội dung của trang có thể thay đổi một cách linh hoạt. Đây được gọi là nội dung web động.
Một trang web động sẽ hiển thị nội dung khác nhau mỗi khi người dùng truy cập vào. Điều này rất hữu ích cho các ứng dụng web kinh doanh như quản lý tài khoản thành viên, tên người dùng, mật khẩu, và các dữ liệu nhạy cảm khác.
Sự phát triển của ASP.NET
Năm 2002, Microsoft phát hành .NET Framework, cùng với đó là phiên bản đầu tiên của ASP.NET. Đến năm 2008, ASP.NET đã được nâng cấp lên phiên bản ASP.NET 3.5, với nhiều cải tiến vượt trội so với ASP ban đầu. Kể từ đó, ASP.NET tiếp tục phát triển cùng với .NET Framework, với các bản phát hành lớn vào các năm 2010 và 2013.
Khi web ngày càng phát triển, các trang web trở nên tương tác hơn. Năm 2007, Microsoft phát hành ASP.NET 3.5 cùng các công cụ mới như ASP.NET AJAX, LINQ, và Dynamic Data. Năm 2009, phiên bản ASP.NET 3.5 SP1 được phát hành, giới thiệu một phương pháp mới dựa trên MVC (Model-View-Controller) để xử lý các yêu cầu trang web.
Các phiên bản quan trọng của ASP.NET
Khi .NET Framework 4.0 được phát hành, ASP.NET cũng được nâng cấp lên phiên bản ASP.NET 4.0, với nhiều công cụ mới như Web API và SignalR. Đến năm 2017, Microsoft tiếp tục tích hợp .NET Framework với Windows 10, và phiên bản cuối cùng là .NET Framework 4.8 được phát hành vào tháng 5 năm 2022. Sau đó, Microsoft quyết định không phát triển thêm các phiên bản mới của .NET Framework nữa, vì đã chuyển sang nền tảng .NET hiện đại.
.NET là một nền tảng mã nguồn mở, đa nền tảng được Microsoft phát triển, cho phép xây dựng nhiều loại ứng dụng khác nhau bao gồm ứng dụng web, desktop, di động, và đám mây, sử dụng các ngôn ngữ lập trình như C#, F#, và VB.NET.
1.2 Sử dụng và các tính năng của ASP.NET
Dưới đây là các ứng dụng của ASP.NET:
- Lý tưởng cho ứng dụng web đa dạng: Đây là một cách tiếp cận lý tưởng để tạo ra nhiều ứng dụng web khác nhau phù hợp với xu hướng thị trường. Các ứng dụng phức tạp có thể được tạo ra dễ dàng và cả các ứng dụng dựa trên web lẫn desktop đều có thể được phát triển nhanh chóng hơn.
- Thư viện đa dạng và linh hoạt: ASP.NET cung cấp thư viện phong phú và linh hoạt, giúp tăng cường khả năng bảo mật.
- Giảm thiểu mã nguồn: Nó giảm đáng kể lượng mã nguồn cần thiết trong trường hợp phát triển các ứng dụng web lớn.
- Giao diện WYSIWYG: ASP.NET cung cấp giao diện WYSIWYG (What You See Is What You Get) và các thành phần server-side với khả năng kéo và thả, giúp thao tác trở nên đơn giản và thuận tiện.
- Tách biệt HTML và mã nguồn: ASP.NET tách biệt mã HTML và mã nguồn, giúp cho việc sửa đổi dễ dàng hơn.
- Hỗ trợ các sự kiện: Các trang web tĩnh không cho phép lập trình viên viết mã để thực thi khi có sự kiện cụ thể xảy ra. Dù điều này có thể đạt được với CGI script, tuy nhiên nó dài dòng và tốn thời gian. Với ASP.NET, nhờ hỗ trợ xử lý sự kiện, điều này có thể đạt được mà không gặp lỗi. Ví dụ như sự kiện
Page_Load
, được gọi khi trang được tải. - Khả năng tương thích rộng: Với lệnh
runat
, ASP.NET đảm bảo khả năng tương thích hoàn toàn với các ngôn ngữ lập trình đa dạng cũng như với các trang của các phiên bản ASP cũ.
Do ASP.NET thuộc nền tảng .NET, mã nguồn của nó được quản lý. Các ứng dụng ASP.NET được tạo ra với sự hỗ trợ của các thành phần có thể mở rộng và tái sử dụng. Những mã này có thể sử dụng toàn bộ hệ thống lớp có sẵn trong framework.
ASP.NET cung cấp một số tính năng mạnh mẽ. Một số tính năng đó bao gồm:
- Hạ tầng phần mềm toàn diện: ASP.NET cung cấp một mô hình lập trình, hạ tầng toàn diện và các cơ sở cần thiết để tạo ra các ứng dụng web mạnh mẽ cho nhiều thiết bị khác nhau.
- Lớp trừu tượng: ASP.NET cung cấp lớp trừu tượng trên giao thức HTTP, cho phép tạo ra các ứng dụng web hợp tác và hướng dữ liệu.
- Hỗ trợ đa ngôn ngữ: ASP.NET cho phép mã hóa bằng nhiều ngôn ngữ như C#, Visual Basic.NET, JScript và J#.
- Dữ liệu tương tác
ASP.NET được sử dụng để tạo các ứng dụng web hợp tác và hướng dữ liệu trên Internet. Nó bao gồm các thành phần điều khiển khác nhau, chẳng hạn như hộp văn bản, nút, và nhãn để xây dựng, thiết lập và chỉnh sửa mã HTML trên các trang web. - Giao thức HTTP
ASP.NET sử dụng giao thức HTTP cùng với các lệnh và chính sách của giao thức này, cho phép tương tác giữa trình duyệt và máy chủ. - Visual Studio
Ứng dụng và giao diện người dùng của ASP.NET được tạo ra bằng Visual Studio.
Vì vậy, có thể kết luận rằng với sự hỗ trợ của ASP.NET, các nhà phát triển có thể tích hợp các yếu tố quan trọng của một trang web kinh doanh một cách hoàn chỉnh.
1.3 Vòng đời của trang ASP.NET
Vòng đời trang ASP.NET mô tả cách ASP.NET xử lý các trang để tạo ra kết quả. Nó cũng chỉ định cách mà ứng dụng và các trang liên quan được khởi tạo và xử lý. Vòng đời này có thể được chia thành hai loại chính:
- Vòng đời của ứng dụng
- Vòng đời của trang
Một trang ASP.NET sẽ đi qua một loạt các giai đoạn giữa khởi tạo và hủy bỏ. Ban đầu, khi có yêu cầu truy cập vào một trang, chương trình sẽ tải trang vào bộ nhớ máy chủ, xử lý nó và gửi đến trình duyệt. Sau khi hoàn tất, nó sẽ được xóa khỏi bộ nhớ. Tại mỗi giai đoạn, có các phương thức và sự kiện, có thể được ghi đè tùy theo yêu cầu của ứng dụng. Nói cách khác, lập trình viên có thể tự viết mã để thay thế mã mặc định.
Các giai đoạn của vòng đời trang bao gồm:
- Khởi tạo
- Khởi tạo các thành phần trên trang
- Phục hồi và duy trì trạng thái
- Thực thi các trình xử lý sự kiện
- Hiển thị trang
Việc hiểu rõ vòng đời của trang là rất quan trọng vì nó hỗ trợ lập trình viên trong việc cấu hình mã, điền thông tin vào các thuộc tính với dữ liệu trạng thái và thực thi các mã tùy chỉnh trong các giai đoạn cụ thể của vòng đời trang.
Các giai đoạn khác nhau của một trang ASP.NET:
- Yêu cầu trang
Khi một yêu cầu trang được nhận, ASP.NET sẽ kiểm tra xem liệu có cần phân tích và biên dịch trang hay không, hoặc sử dụng phiên bản đã lưu trong bộ nhớ đệm của trang. Dựa trên kết quả, nó sẽ phản hồi tương ứng. - Bắt đầu vòng đời của trang
Các đối tượng Request (Yêu cầu) và Response (Phản hồi) được thiết lập. Nếu yêu cầu là một yêu cầu mới, không phải từ việc tải lại trang, thì thuộc tính IsPostBack của trang được gán giá trịfalse
. Thuộc tính UICulture (Văn hóa Giao diện Người dùng) cũng được thiết lập. - Khởi tạo trang
Thuộc tính UniqueID được thiết lập để phân bổ ID duy nhất cho các thành phần trên trang và các chủ đề (themes) được áp dụng. Trong trường hợp yêu cầu mới, nó tải lại dữ liệu từ lần tải trước và trả về các giá trị thuộc tính cho các thành phần trong trang. - Tải trang
Các thuộc tính của thành phần được thiết lập với sự hỗ trợ của trạng thái ViewState và các giá trị điều khiển trạng thái. - Xác thực
Xác thực những giá trị có sẵn trong các điều kiện xác thực của trang. Sau khi xác thực thành công, thuộc tính IsValid của trang được gán giá trịtrue
. - Xử lý sự kiện từ việc tải lại trang (Postback)
Nếu yêu cầu không phải là một yêu cầu mới, trình xử lý sự kiện tương ứng sẽ được gọi. - Hiển thị trang
Trạng thái và tất cả các thành phần của trang được lưu trữ. Trang sử dụng phương thức Render (Hiển thị) để tạo mã HTML; đầu ra của nó sẽ được chuyển tới OutputStream của thuộc tính Response của trang. - Hủy trang (Unloading)
Trang đã hiển thị được gửi đến cho khách hàng, các thuộc tính của trang được dỡ bỏ, và quy trình dọn dẹp hoàn tất.
Một trang ứng dụng ASP.NET bao gồm nhiều thành phần máy chủ khác nhau, đóng vai trò là các khối xây dựng chính của ứng dụng.
Code Snippet dưới tạo một trang mẫu. Các thành phần HTML cơ bản có thể được chuyển đổi thành các thành phần server bằng cách thêm thuộc tính runat = "server"
và chèn thuộc tính ID để hỗ trợ xử lý phía máy chủ.
Máy chủ khi xử lý đoạn mã này không tập trung vào các thành phần điều khiển, ví dụ như thẻ tiêu đề và thẻ liên kết (anchor), cũng như các phần tử nhập liệu. Thay vào đó, các phần tử này được chuyển tiếp tới trình duyệt, nơi chúng sẽ được hiển thị.
<head>
<style type="text/css">
.auto-style1 {
margin-right: 0px;
margin-top: 7px;
}
</style>
</head>
<form id="form1" runat="server">
<p> </p>
<p>
<asp:Label ID="Label1" runat="server" Text="Username"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" CssClass="auto-style1" Height="23px" Width="124px"></asp:TextBox>
</p>
<p> </p>
<p>
<asp:Label ID="Label2" runat="server" Text="Password"></asp:Label>
<asp:TextBox ID="TextBox2" runat="server" TextMode="Password"></asp:TextBox>
</p>
<p> </p>
<asp:Button ID="Button1" runat="server" Text="Submit" />
</form>
Nhập mã trên vào tab Source của tệp Default.aspx
trong môi trường phát triển IDE. Trong quá trình phát triển thực tế, khuyến nghị nên thiết kế form đầu tiên bằng cách sử dụng Toolbox trong IDE thay vì viết mã từ đầu.
Nhấp vào tùy chọn Design như trong Hình dưới để xem cách trang sẽ hiển thị.
Trang được hiển thị trong Hình 1.4 xuất hiện sau khi nhấp vào tab Design. Đây là trình chỉnh sửa giao diện cho một trang ASP.NET.
Phía bên trái của trang hiển thị phần Toolbox, bao gồm nhiều điều khiển HTML khác nhau. Để sử dụng các điều khiển này, chỉ cần chọn điều khiển cần thiết và kéo thả vào trang. Sau khi lập trình viên thêm các điều khiển, mã HTML tương tự như Code Snippet 1 sẽ được tạo trong tab Source.
Kết quả hiển thị trong Hình dưới sẽ xuất hiện khi chạy trang trong trình duyệt.
Vòng đời của một trang ASP.NET phụ thuộc vào việc yêu cầu trang là yêu cầu mới hay từ việc tải lại trang (postback). Postback được định nghĩa là quá trình xảy ra khi một trang đặt lại yêu cầu đến máy chủ.
Dưới đây là các bước của vòng đời khi có một yêu cầu mới:
- Khởi tạo: Trong giai đoạn này, máy chủ tạo ra phiên bản mới của điều khiển trên máy chủ.
- Tải: Ở giai đoạn này, phiên bản của điều khiển được tạo trong yêu cầu trước đó được tải vào đối tượng trang mà nó được xác định.
- Chuẩn bị để hiển thị (PreRendering): Tiếp theo, điều khiển được cập nhật để phản ánh các thay đổi đã thực hiện trên nó.
- Lưu trạng thái (Saving): Ở giai đoạn này, dữ liệu của điều khiển được lưu trữ. Ví dụ, trong trường hợp giá trị của điều khiển không thay đổi, nó sẽ được lưu trữ trong HTML và được gửi lại cho trình duyệt.
- Hiển thị: Cuối cùng, máy chủ tạo mã HTML liên quan để hiển thị trang.
- Dọn dẹp: Trong giai đoạn này, tất cả các hoạt động dọn dẹp hoàn tất.
- Hủy: Tất cả các hoạt động chờ xử lý bị hủy bỏ, chẳng hạn như đóng kết nối cơ sở dữ liệu.
Trong trường hợp postback, vòng đời của trang diễn ra như sau:
- Khởi tạo: Một phiên bản mới của điều khiển trên máy chủ được kích hoạt.
- Tải dữ liệu postback: Máy chủ kiểm tra và tải lại các thông tin liên quan đến điều khiển từ yêu cầu trước đó.
- Chuẩn bị để hiển thị (PreRendering): Mọi cập nhật trong điều khiển được thực hiện để sẵn sàng cho việc hiển thị.
- Lưu trạng thái: Bất kỳ thay đổi nào trong trạng thái điều khiển so với yêu cầu trước đó được lưu lại.
Dưới đây là các sự kiện kết nối với các giai đoạn vòng đời trang tương ứng:
- Page Initialization (Khởi tạo trang): Page_Init
- Loading View State (Tải trạng thái hiển thị): LoadViewState
- Postback Data Processing (Xử lý dữ liệu postback): LoadPostData
- Page Loading (Tải trang): Page_Load
- Postback Change Notification (Thông báo thay đổi postback): RaisePostDataChangedEvent
- Postback Event Handling (Xử lý sự kiện postback): RaisePostBackEvent
- Pre-Rendering Phase (Giai đoạn chuẩn bị hiển thị): PreRender
- Saving View State (Lưu trạng thái hiển thị): SaveViewState
- Rendering Page (Hiển thị trang): Page_Render
- Page Unloading (Hủy trang): Page_Unload
Hình dưới mô tả cách máy chủ xử lý các điều khiển trên trang ASP.NET. Ảnh bên trên hiển thị các điều khiển trong trường hợp postback và ảnh bên dưới hiển thị các điều khiển trong trường hợp callback.
1.4 Giới thiệu về ASP.NET Core
ASP.NET Core là một framework mã nguồn mở, đa nền tảng. Nó giúp dễ dàng phát triển các ứng dụng web hiện đại, bao gồm cả các ứng dụng đám mây. Một số ví dụ về ứng dụng bao gồm ứng dụng web, ứng dụng API, và các ứng dụng di động.
Các ứng dụng ASP.NET Core có khả năng chạy trên cả .NET Core và .NET Framework. Với thiết kế các thành phần mô-đun yêu cầu tài nguyên tối thiểu, các nhà phát triển có sự linh hoạt hơn trong việc tạo giải pháp. Họ có thể tạo và thực hiện các ứng dụng ASP.NET Core trên Windows, Mac OS, và Linux.
ASP.NET Core không phụ thuộc vào hệ thống như System.Web.dll. Hiện tại nó được hỗ trợ thông qua các gói NuGet, giúp các nhà phát triển tối ưu hóa và chỉ thêm các gói họ cần. Các ưu điểm bao gồm giảm bớt kích thước ứng dụng, tăng cường bảo mật, cải thiện dịch vụ được cung cấp, nâng cao hiệu suất và giảm thời gian phản hồi.
Các cải tiến của ASP.NET Core bao gồm:
- Phát triển web được sắp xếp hợp lý
- Giảm thiểu bộ nhớ
- Một framework tốt hơn cho các ứng dụng trên đám mây
- Hỗ trợ nhiều nền tảng
- Tăng cường khả năng triển khai một loạt các ứng dụng web và API
- Hỗ trợ tầng HTTP linh hoạt và trọng lượng nhẹ giúp tối ưu hóa hiệu suất
- Hỗ trợ lưu trữ các ứng dụng trên các nền tảng hoặc hệ điều hành khác nhau
- Triển khai đồng thời các ứng dụng
1.5 Lợi ích của ASP.NET Core
Dưới đây là các lợi ích của ASP.NET Core:
- Hỗ trợ Dependency Injection (DI): ASP.NET Core cung cấp một giải pháp tích hợp cho quản lý vòng đời đối tượng và các kiểu phản hồi khác nhau. DI có sẵn như là một phần của framework.
- Hỗ trợ đa nền tảng: ASP.NET Core hoạt động trên Windows, Mac OS, và Linux. Với các công cụ như Visual Studio Code, lập trình viên có thể phát triển ứng dụng trên nhiều nền tảng khác nhau.
- Đơn giản hóa phát triển MVC và Web API: ASP.NET Core kết hợp MVC và Web API vào một phiên bản chung, đơn giản hóa quá trình phát triển. Các mô hình MVC và Web API giờ đây dễ dàng tích hợp hơn nhờ vào không gian tên chung.
- Tăng năng suất: Microsoft cung cấp Kestrel, một web server nhẹ giúp tăng năng suất và tương thích đa nền tảng.
1.6 Lựa chọn giữa ASP.NET và ASP.NET Core
Mặc dù ASP.NET là một framework đã có từ lâu với đầy đủ các yếu tố cần thiết để phát triển các ứng dụng web mạnh mẽ, ASP.NET Core lại là một giải pháp mã nguồn mở mới, giúp phát triển các ứng dụng web hiện đại và đám mây trên nhiều nền tảng, không chỉ là hệ điều hành Windows mà còn bao gồm cả MacOS và Linux.
ASP.NET Core | ASP.NET |
---|---|
Ứng dụng có thể được xây dựng trên Windows, MacOS, và Linux. | Chỉ có thể xây dựng trên Windows. |
Hỗ trợ các ứng dụng dựa trên .NET Core và .NET Framework từ phiên bản 2.x trở đi. | Dựa trên .NET Framework. |
Được tối ưu hóa cho đám mây và có cấu trúc module. | Hiệu năng thấp hơn do phụ thuộc vào .NET Framework. |
Thời gian phản hồi tốt hơn và hiệu năng cao. | Thời gian phản hồi chậm hơn. |
1.7 Blazor
Blazor là một framework Web của .NET, được sử dụng để phát triển các ứng dụng client-side bằng C#/Razor và HTML. Ứng dụng chạy trong trình duyệt sử dụng Web Assembly.
Blazor có thể đơn giản hóa quá trình phát triển các ứng dụng Single-Page Applications (SPA) và cũng hỗ trợ phát triển full-stack với .NET. Nó cũng cho phép tích hợp với các nền tảng lưu trữ như Docker.
1.8 SignalR
SignalR là một thư viện mã nguồn mở, cho phép các ứng dụng web nhận dữ liệu mới nhất theo thời gian thực, chẳng hạn như tin nhắn, cảnh báo, và dữ liệu cụ thể từ ứng dụng mà không cần tải lại trang. Điều này rất hữu ích cho các ứng dụng cần cập nhật thường xuyên, chẳng hạn như bảng điều khiển bán hàng hoặc thị trường chứng khoán.
SignalR cung cấp một API để tạo các cuộc gọi thủ tục từ xa (RPC) từ server đến client và cho phép thực hiện các thao tác thời gian thực giữa các ứng dụng ASP.NET Core và các ứng dụng khác. Một số ứng dụng sử dụng SignalR bao gồm:
- Ứng dụng yêu cầu cập nhật thường xuyên, như trò chơi hoặc thông báo thị trường.
- Ứng dụng tổ chức các buổi họp trực tuyến.
- Ứng dụng yêu cầu giao tiếp theo thời gian thực giữa các máy khách.
1.9 Dapper
Dapper là một công cụ Object Mapper đơn giản cho phép thực hiện Object-Relational Mapping (ORM) và tạo cầu nối giữa các cơ sở dữ liệu và các ngôn ngữ lập trình. Dapper cũng được biết đến như một Micro ORM và có tốc độ tương đương với ADO.NET.
Phương thức QueryAsync()
trong Code Snippet 2 là một phần mở rộng của Dapper cho phép lấy dữ liệu từ cơ sở dữ liệu với các tham số đã được xác định trước.
1.10 Các tính năng của ASP.NET Core 7.0
Phiên bản mới nhất của ASP.NET Core là 7.0, chính thức phát hành vào ngày 8 tháng 11 năm 2022. Một số tính năng chính bao gồm:
- Servers and Runtime: Các nhà phát triển có thể kiểm soát tỷ lệ yêu cầu thông qua cài đặt endpoint.
- Minimal APIs: Cho phép các lập trình viên sử dụng APIs tối giản.
- gRPC: Mở rộng khả năng của các dịch vụ gRPC bằng cách cung cấp chúng dưới dạng APIs JSON.
- SignalR: Hỗ trợ phản hồi nhanh chóng cho các yêu cầu từ server.
- Blazor: Tối ưu hóa hiệu năng của Blazor.
- gRPC: Mở rộng khả năng truy cập vào dịch vụ gRPC bằng cách cung cấp API JSON.
- SignalR: Phản hồi yêu cầu của máy khách một cách nhanh chóng.
- Blazor: Cải thiện hiệu năng của Blazor WebAssembly.