Nguon: Microsoft Learn · .NET 8.0

Phần 2: Thêm Controller vào ứng dụng ASP.NET Core MVC

Nguồn: Part 2, add a controller to an ASP.NET Core MVC app

Pattern kiến trúc Model-View-Controller (MVC) tách một ứng dụng thành ba thành phần chính: Model (mô hình), View (giao diện) và Controller (bộ điều khiển). Pattern MVC giúp bạn tạo các ứng dụng dễ kiểm thử hơn và dễ cập nhật hơn so với các ứng dụng monolithic (đơn khối) truyền thống.

Các ứng dụng dựa trên MVC chứa:

Trong ứng dụng MVC, view chỉ hiển thị thông tin. Controller xử lý và phản hồi các input và tương tác của người dùng. Ví dụ, controller xử lý các URL segment (đoạn URL) và giá trị query-string, rồi truyền các giá trị này vào model. Model có thể sử dụng các giá trị này để query database. Ví dụ:

Route data (dữ liệu định tuyến) được giải thích sau trong hướng dẫn.

Pattern kiến trúc MVC tách một ứng dụng thành ba nhóm thành phần chính: Models, Views và Controllers. Pattern này giúp đạt được separation of concerns (phân tách mối quan tâm): Logic UI thuộc về view. Logic input thuộc về controller. Business logic thuộc về model. Sự phân tách này giúp quản lý sự phức tạp khi xây dựng ứng dụng, vì nó cho phép làm việc trên một khía cạnh của việc triển khai tại một thời điểm mà không ảnh hưởng đến code của phần khác.

Các khái niệm này được giới thiệu và trình bày trong loạt bài hướng dẫn này trong khi xây dựng ứng dụng phim. Dự án MVC chứa các thư mục cho ControllersViews.

Thêm controller

Visual Studio

Trong Solution Explorer, nhấp chuột phải vào Controllers > Add > Controller.

Trong hộp thoại Add New Scaffolded Item, chọn MVC Controller - Empty > Add.

Trong hộp thoại Add New Item - MvcMovie, nhập HelloWorldController.cs và chọn Add.

Visual Studio Code

Chọn biểu tượng EXPLORER rồi nhấp chuột phải vào Controllers > New File và đặt tên tệp mới là HelloWorldController.cs.


Thay thế nội dung của Controllers/HelloWorldController.cs bằng code sau:

csharp
using Microsoft.AspNetCore.Mvc;
using System.Text.Encodings.Web;

namespace MvcMovie.Controllers;

public class HelloWorldController : Controller
{
    // 
    // GET: /HelloWorld/
    public string Index()
    {
        return "This is my default action...";
    }
    // 
    // GET: /HelloWorld/Welcome/ 
    public string Welcome()
    {
        return "This is the Welcome action method...";
    }
}

Mọi phương thức public trong một controller đều có thể được gọi như một HTTP endpoint. Trong mẫu trên, cả hai phương thức đều trả về một chuỗi.

Một HTTP endpoint:

Comment đầu tiên nói rằng đây là phương thức HTTP GET được gọi bằng cách thêm /HelloWorld/ vào base URL.

Comment thứ hai chỉ định một phương thức HTTP GET được gọi bằng cách thêm /HelloWorld/Welcome/ vào URL. Ở phần sau trong hướng dẫn, scaffolding engine (công cụ scaffolding) được sử dụng để tạo các phương thức HTTP POST, cập nhật dữ liệu.

Chạy ứng dụng không có debugger bằng cách nhấn Ctrl+F5.

Thêm /HelloWorld vào path trong thanh địa chỉ. Phương thức Index trả về một chuỗi.

MVC gọi các class controller và các action method (phương thức hành động) trong chúng, tùy thuộc vào URL đến. URL routing logic mặc định được MVC sử dụng, sử dụng định dạng như sau để xác định code nào sẽ được gọi:

/[Controller]/[ActionName]/[Parameters]

Định dạng routing được đặt trong tệp Program.cs.

csharp
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Khi bạn duyệt đến ứng dụng và không cung cấp bất kỳ URL segment nào, nó mặc định sử dụng controller "Home" và phương thức "Index" được chỉ định trong dòng template được tô sáng ở trên. Trong các URL segment trước:

Duyệt đến: https://localhost:{PORT}/HelloWorld/Welcome. Thay thế {PORT} bằng số port của bạn.

Phương thức Welcome chạy và trả về chuỗi This is the Welcome action method.... Đối với URL này, controller là HelloWorldWelcome là action method. Bạn chưa sử dụng phần [Parameters] của URL.

Truyền tham số từ URL

Sửa đổi code để truyền một số thông tin tham số từ URL vào controller. Ví dụ, /HelloWorld/Welcome?name=Rick&numtimes=4.

Thay đổi phương thức Welcome để bao gồm hai tham số như trong code sau.

csharp
// GET: /HelloWorld/Welcome/ 
// Requires using System.Text.Encodings.Web;
public string Welcome(string name, int numTimes = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, NumTimes is: {numTimes}");
}

Code trước:

Chạy ứng dụng và duyệt đến: https://localhost:{PORT}/HelloWorld/Welcome?name=Rick&numtimes=4.

Thử các giá trị khác nhau cho namenumtimes trong URL. Hệ thống model binding (ràng buộc model) MVC tự động ánh xạ các tham số được đặt tên từ query string (chuỗi truy vấn) sang các tham số trong phương thức.

Trong hình ảnh trước:

Sử dụng Route Parameter

Thay thế phương thức Welcome bằng code sau:

csharp
public string Welcome(string name, int ID = 1)
{
    return HtmlEncoder.Default.Encode($"Hello {name}, ID: {ID}");
}

Chạy ứng dụng và nhập URL sau: https://localhost:{PORT}/HelloWorld/Welcome/3?name=Rick

Trong URL trước:

csharp
app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

Trong ví dụ trước:

Trước: Bắt đầu | Tiếp theo: Thêm View