Cơ bản về ASP.NET Core Controller
Bài viết này chúng ta sẽ tìm hiểu khái niệm cơ bản của ASP.NET Core Controller. Bạn sẽ tìm hiểu Controller là gì và trách nhiệm của nó. Bạn cũng học cách thêm mới Controller và các Action Method trong controller cũng như các kiểu trả về.
Controller là gì?
Controller là thành phần đầu tiên nhận request từ người dùng. Khi người dùng truy cập URL qua trình duyệt, ASP.NET Core routing sẽ map request đó vào controller cụ thể.
Ví dụ: Request URL như sau: http://localhost/Customer/List
Trường hợp này, Controller có tên là CustomerController được gọi. Sau đó nó sẽ gọi đến Action metod tên List rồi tạo ra response trả về cho user.
Trách nhiệm của Controller
Controller có 3 trách nhiệm chính:
- Nhận request
- Dựng model
- Gửi trả response
Nhận request
Controller có trách nhiệm nhận request từ user.
Dựng model
Controller Action method thực thi logic của ứng dụng và xây dựng nên model.
Gửi trả kết quả
Cuối cùng nó sẽ trả về kết quả trong HTML, File, JSON, XML hoặc bất cứ định dạng nào về cho user.
Thêm mới controller
Controller không khác gì so với .NET Class thông thường. Chỉ có điều nó nằm trong thư mục Controllers là thư mục nằm trong thư mục gốc của ứng dụng. Bạn có thể tạo mới controller bằng cách chọn thư mục Controllers và chuột phải chọn Add-> Controller.

Sau đó bạn sẽ được nhìn thấy các tùy chọn khác nhau. Có 2 tùy chọn chính:
- MVC Controller
- API Controller

Cả MVC và API controller đều kế thừa từ cùng class Controller nên nó không khác nhau nhiều. Ngoại trừ API controller nhằm mục đích trả về dữ liệu được định dạng cho client.
Chúng ta cũng có 3 tùy chọn cho mỗi loại trên:
- Empty
- With Read/Write Actions
- With Views, using entity framework
Có cách khác tạo Controller là chuột phải vào thư mục Controllers chọn Add new item và chọn MVC Controller trong template. Nó sẽ tạo ra một Empty Controller.

Các controller trong ASP.NET Core kế thừa từ class Controller và nó lại kế thừa từ class ControllerBaseClass. 2 base class này cung cấp nhiều các phương thức hữu ích.
Controller class phải thỏa mãn ít nhất một trong các điều kiện sau:
- Tên class phải có đuôi "Controller"
- Class kế thừa từ một class cung phải có tên đuôi là "Controller"
- Class được đặt thuộc tính [Controller]
Action Method
Bất cứ public method nào được chìa ra ngoài bởi Controller đều được gọi là Action method. Action method get dduocj gọi khi user gõ một URL trên trình duyệt.
Ví dụ: http://localhost/Customer/List sẽ gọi action method tên List trong CustomerController.
Action method sẽ gọi tầng service layer để phản hồi lại request. Service layer sẽ tương tác với database sử dụng tầng data access layer và map kết quả về model sau đó gửi lại cho Action method.
Action method sẽ gọi View với model để trả về kết quả cho người dùng.
Bất cứ public method trong controller có thể được gọi bởi bất cứ ai biết được URL của nó. Hãy cẩn thận khi bạn đặt một public method trong controller.
Khi tạo một Action method bạn cần nhớ những điều sau:
- Action method phải là một public method
- Action method không thể là static method hoặc một extension method.
- Constructor, getter, setter không được sử dụng.
- Các phương thức được kế thừa không được sử dụng như là một action method.
- Action method không được chứa từ khóa ref hoặc out trên tham số.
- Action method không được chứa thuộc tính [NonAction]
- Ation method không thể được nạp chồng (overloaded)
Routing
Routing module là một phần quan trọng của ASP.NET Core. Module này phân tích URL đến và gọi đúng Controller và action tương ứng với request.
Ví dụ URL được gọi là http://localhost/Customer/List thì đầu tiên nó sẽ đi qua routing module. Routing module sẽ phân tích URL này và chọn Controller tương ứng để nhận request. Sau đó nó sẽ tạo ra một thể hiện của Controller và gọi đúng action method.
Chúng ta sẽ thảo luận nó trong bài về routing trong ASP.NET Core. Routing có thể triển khai theo kiểu Convention based hoặc Attribute based. Routes được định nghĩa sử dụng convention hay attribute đều được. Routing module sử dụng Routes map để map request đến Controller Action. Routes có thể chỉ ra ActionName attribute đến tên Action method. Ngoài ra thì HTTP Action Verbs có thể được dùng để điều khiển theo HTTP request method. HƠn nữa, chúng ta có thể sử dụng Route Constrains để phân biệt giữa các route giống nhau.
Kiểu trả về
Action method có trách nhiệm trong việc nhận các request và tạo ra response trả về cho người dùng. Response có thể là một trang HTML, JSON, XML hay một file để download.
Một controller action có thể trả về bất cứ kiểu nào bạn muốn. Ví dụ action method dưới đây trả về một string.
public string Index() {
return "Hello from Index method of Home Controller";
}
Tổng quan, một controller action sẽ trả về một cái gì đó gọi là Action Result. Mỗi một kiểu trả về như là HTML, JSON hay string thì ddeuf là Action Result, nó kế thừa từ ActionResult class. ActionResult class là một lớp trừu tượng (abstract class).
Ví dụ để tạo ra một response dạng HTML thì chúng ta dùng ViewResult. Để tạo ra một string hoặc một văn bản thì chúng ta sử dụng ContentResult. Cả ViewResult và ContentResult đều kế thừa từ ActionResult.
ASP.NET Core MVC đã xây dựng sẵn vài kiểu trả về của action result bao gồm:
- ViewResult - hiển thị HTML
- EmptyResult - hiển thị không kết quả
- RedirectResult - trình bày một lệnh chuyển hướng đến một URL mới
- JsonResult - trình bày một JSON object được sử dụng cho ứng dụng AJAX.
- JavaScriptResult - trả về một đoạn JavaScript
- ContentResult - trả về một văn bản
- FileContentResult - trả về một file có thể download dạng nhị phân
- FilePathResult - trả về một file có thể download dạng đường dẫn
- FileStreamResult - trả về một file có thể download dạng stream.
Tổng kết
Bài này chúng ta đã học về vài khái niệm căn bản của ASP.NET Core MVC Controller, controller action, và controller action result.
Trích nguồn từ: https://www.tektutorialshub.com/
Tags:
Bài viết liên quan
Xây dựng menu đa cấp với ASP.NET Core MVC
Cách xây dựng menu đa cấp sử dụng đệ quy trong ASP.NET Core MVC
Đọc thêm
Tìm hiểu về ABP Framework, một framework mã nguồn mở trên .NET
ABP Framework là một framework hoàn chỉnh để xây dựng ứng dụng web hiện đại bằng cách áp dụng các best practice và tiêu chuẩn trong phát triển phần mềm.
Đọc thêm
Tìm lỗi ứng dụng ASP.NET Core trên Windows Server sử dụng stdout log
Một số lỗi trong lúc khởi động hệ thống ASP.NET Core trên Windows Server mà chúng ta chưa rõ nguyên nhân tại sao ứng dụng không hoạt động. Vậy bạn có thể dùng đểns stdout để chẩn đoán lỗi.
Đọc thêmVòng đời của Dependency Injection: Transient, Singleton và Scoped
Hiểu về vòng đời của các service được tạo sử dụng Dependency Injection là rất quan trọng trước khi sử dụng chúng.
Đọc thêm
Cơ chế Dependency Injection trong ASP.NET Core
Dependency Injection giờ đã trở thành thành phần chính thức mặc định của ASP.NET Core.
Đọc thêm
Unobtrusive Client Validation trong ASP.NET Corre
Trong bài viết này chúng ta sẽ thực hiện validation phía client sử dụng Javascript.
Đọc thêm
Validation Tag Helper trong ASP.NET Core
ASP.NET cung cấp các tag helper liên quan đến hiển thị validation message cho người dùng.
Đọc thêm
Model Validation trong ASP.NET Core
Bài viết này chúng ta sẽ học về cơ chế Model Validation.
Đọc thêm
Cơ chế Model Binding: Truyền dữ liệu từ View lên Controller
Trong cơ chế Model Binding của ASP.NET Core chúng ta sẽ học cách làm sao để truyền dữ liệu từ View lên Controller.
Đọc thêm
Environment Tag Helper trong ASP.NET Core
Environment tag helper hỗ trợ tạo ra các nội dung phụ thuộc vào biến quy định môi trường trong ASP.NET Core.
Đọc thêm