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.

Tác giả: Bạch Ngọc Toàn

Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.

Lên trên