Services.adddbcontext todocontext opt opt.useinmemorydatabase todolist bị lỗi
Hướng dẫn này cung cấp kiến thức cơ bản về xây dựng API web dựa trên controller sử dụng cơ sở dữ liệu. Một cách tiếp cận khác để tạo API trong ASP.NET Core là tạo các API tối thiểu. Để được trợ giúp trong việc lựa chọn giữa API tối thiểu và API dựa trên controller, hãy xem Chọn giữa API dựa trên controller và API tối thiểu. Để biết hướng dẫn về cách tạo API tối thiểu, hãy xem Hướng dẫn: Tạo API tối thiểu với ASP.NET Core. Show
Tổng quanHướng dẫn này tạo API sau: API Mô tả Request body Response body
4 Nhận tất cả các mục việc cần làm Không có Mảng việc cần làm
5 Nhận một mục theo ID Không có Mục việc cần làm
6 Thêm một mục mới Mục việc cần làm Mục việc cần làm
7 Cập nhật một mục hiện có Mục việc cần làm Không có
8 Xóa một mục Không có Không có Sơ đồ sau đây cho thấy thiết kế của ứng dụng. Điều kiện tiên quyếtVới Visual Studiođã cài đặt ASP.NET and web development. Với Visual Studio Code
Hướng dẫn Visual Studio Code sử dụng .NET CLI cho các chức năng phát triển ASP.NET Core, chẳng hạn như tạo dự án. Bạn có thể làm theo các hướng dẫn này trên macOS, Linux hoặc Windows và với bất kỳ trình chỉnh sửa mã nào. Những thay đổi nhỏ có thể được yêu cầu nếu bạn sử dụng thứ gì đó khác với Visual Studio Code. Với Visual Studio dành cho Mac
Tạo một dự án webVisual Studio
Với Visual Studio Code
Các lệnh này sẽ:
• Khi hộp thoại hỏi bạn có muốn thêm nội dung cần thiết vào dự án hay không, hãy chọn Yes. Với Visual Studio dành cho Mac
Thêm gói NuGet
Chạy thử dự ánMẫu dự án tạo một API namespace TodoApi.Models; public class TodoItem { }0 có hỗ trợ cho Swagger. Nhấn Ctrl+F5 để chạy mà không cần trình gỡ lỗi. Visual Studio hiển thị hộp thoại sau khi dự án chưa được định cấu hình để sử dụng SSL: Chọn Yes nếu bạn tin cậy chứng chỉ SSL IIS Express. Khi đó hộp thoại sau sẽ hiển thị: Chọn Yes nếu bạn đồng ý tin cậy chứng chỉ phát triển. Để biết thông tin về cách tin cậy trình duyệt Firefox, hãy xem . Visual Studio khởi chạy trình duyệt mặc định và điều hướng đến namespace TodoApi.Models; public class TodoItem { }1, trong đó namespace TodoApi.Models; public class TodoItem { }2 có số cổng được chọn ngẫu nhiên. Trang Swagger namespace TodoApi.Models; public class TodoItem { }3 được hiển thị. Chọn GET > Try it out > Execute. Trang hiển thị:
Nếu trang Swagger không xuất hiện, hãy xem vấn đề GitHub này. Swagger được sử dụng để tạo các trang trợ giúp và tài liệu hữu ích cho các API web. Hướng dẫn này tập trung vào việc tạo API web. Để biết thêm thông tin về Swagger, hãy xem tài liệu API web ASP.NET Core với Swagger/OpenAPI. Sao chép và dán URL yêu cầu trong trình duyệt: namespace TodoApi.Models; public class TodoItem { }4 JSON tương tự như ví dụ sau được trả về:
Thêm một lớp modelModel là một tập hợp các lớp đại diện cho dữ liệu mà ứng dụng quản lý. Model cho ứng dụng này là lớp namespace TodoApi.Models; public class TodoItem { }5.
namespace TodoApi.Models; public class TodoItem { }Property namespace TodoApi.Models; public class TodoItem { }8 hoạt động như một khóa duy nhất trong cơ sở dữ liệu quan hệ. Các lớp model có thể đi đến bất kỳ đâu trong dự án, nhưng thư mục namespace TodoApi.Models; public class TodoItem { }6 được sử dụng theo quy ước. Thêm một database contextDatabase context là lớp chính điều phối chức năng Entity Framework cho một model dữ liệu. Lớp này được tạo bằng cách dẫn xuất từ lớp Microsoft.EntityFrameworkCore.DbContext. Thêm gói NuGet
Thêm database context TodoContext
Đăng ký database contextTrong ASP.NET Core, các dịch vụ như database context phải được đăng ký với vùng chứa dependency injection (DI). Vùng chứa cung cấp dịch vụ cho controller. Cập nhật code cho
3 như sau:
Trong đoạn code trên:
Scaffold một controller
Nếu hoạt động scaffold không thành công, hãy chọn Add để thử scaffold lần thứ hai. Đối với đoạn code đã được tạo:
Các mẫu ASP.NET Core dành cho:
Khi token
6 không có trong mẫu route, thì tên (tên phương thức) không được bao gồm trong điểm cuối. Nghĩa là, tên phương thức được liên kết của hành động không được sử dụng trong lộ trình phù hợp. Cập nhật phương thức tạo PostTodoItemCập nhật câu lệnh return trong toán tử
9 để sử dụng nameof:
Đoạn code trên là một phương thức
0, như được biểu thị bởi attribute [HttpPost]. Phương thức lấy giá trị của namespace TodoApi.Models; public class TodoItem { }5 từ body của request HTTP. Để biết thêm thông tin, hãy xem Định tuyến thuộc tính với attribute Http[Verb]. Phương thức CreatedAtAction:
Kiểm thử PostTodoItem
Kiểm thử URI của header locationTrong POST ở trên, giao diện người dùng Swagger hiển thị tiêu đề vị trí bên dưới Response headers. Ví dụ như
9. Ở đây tiêu đề vị trí hiển thị URI cho tài nguyên đã tạo. Để kiểm tra tiêu đề vị trí:
Kiểm thử các phương thức GETHai điểm cuối GET được triển khai:
Phần bên trên cho thấy một ví dụ về route
4. Thực hiện theo các hướng dẫn để thêm một mục việc cần làm khác, sau đó kiểm tra route
5 bằng Swagger. Ứng dụng này sử dụng cơ sở dữ liệu trong bộ nhớ. Nếu ứng dụng bị dừng và khởi động, thì yêu cầu GET trước đó sẽ không trả về bất kỳ dữ liệu nào. Nếu không có dữ liệu nào được trả về, dữ liệu vào ứng dụng. Định tuyến và đường dẫn URLAttribute [HttpGet] biểu thị một phương thức đáp ứng request
6. Đường dẫn URL cho mỗi phương thức được xây dựng như sau:
Trong phương thức
5 sau đây,
2 là một biến giữ chỗ cho mã định danh duy nhất của mục việc cần làm. Khi
5 được gọi, giá trị của
2 trong URL được cung cấp cho phương thức trong tham số
1 của nó.
Giá trị trả vềKiểu trả về của phương thức
6 và
5 là . ASP.NET Core tự động tuần tự hóa đối tượng thành JSON và ghi JSON vào phần body của thông báo phản hồi. Mã phản hồi cho loại trả về này là 200 OK, giả sử không có ngoại lệ nào chưa được xử lý. Các ngoại lệ chưa được xử lý được dịch thành lỗi 5xx.
8 trả về các kiểu có thể đại diện cho nhiều loại mã trạng thái HTTP. Ví dụ:
5 có thể trả về hai giá trị trạng thái khác nhau:
Phương thức PutTodoItemKiểm thử phương thức
2:
2 tương tự như
9, ngoại trừ nó sử dụng
5. Câu trả lời là . Theo đặc tả HTTP, một yêu cầu
6 yêu cầu máy khách gửi toàn bộ thực thể được cập nhật, không chỉ các thay đổi. Để hỗ trợ cập nhật một phần, hãy sử dụng HTTP PATCH. Kiểm thử phương thức PutTodoItemMẫu này sử dụng cơ sở dữ liệu trong bộ nhớ phải được khởi tạo mỗi khi khởi động ứng dụng. Phải có một mục trong cơ sở dữ liệu trước khi bạn thực hiện lời gọi PUT. Lời gọi GET để đảm bảo có một mục trong cơ sở dữ liệu trước khi thực hiện lời gọi PUT. Sử dụng giao diện người dùng Swagger, sử dụng nút PUT để cập nhật namespace TodoApi.Models; public class TodoItem { }5 có Id = 1 và đặt tên thành
8. Lưu ý rằng phản hồi là HTTP 204 No Content. Phương thức DeleteTodoItemKiểm thử phương thức
9:
0 Kiểm thử phương thức DeleteTodoItemSử dụng UI Swagger để xóa giao diện người dùng namespace TodoApi.Models; public class TodoItem { }5 có Id = 1. Lưu ý rằng phản hồi là HTTP 204 No Content. Kiểm thử với http-repl, Postman hoặc curlhttp-repl, Postman và curl thường được sử dụng để kiểm tra API. Swagger sử dụng
1 và hiển thị lệnh
1 mà nó đã gửi. Để biết hướng dẫn về các công cụ này, hãy xem các liên kết sau: Để biết thêm thông tin về
3, hãy xem Kiểm thử API web với HttpRepl. Ngăn chặn đăng quá nhiềuHiện tại, ứng dụng mẫu hiển thị toàn bộ đối tượng namespace TodoApi.Models; public class TodoItem { }5. Các ứng dụng production thường giới hạn dữ liệu được nhập và trả về bằng cách sử dụng một tập hợp con của model. Có nhiều lý do đằng sau điều này và bảo mật là một trong những lý do chính. Tập hợp con của một model thường được gọi là Đối tượng truyền dữ liệu (DTO), mô hình đầu vào hoặc mô hình xem. DTO được sử dụng trong hướng dẫn này. Một DTO có thể được sử dụng để:
Để minh họa cách tiếp cận DTO, hãy cập nhật lớp namespace TodoApi.Models; public class TodoItem { }5 để bao gồm một trường bí mật:
1 Trường bí mật cần được ẩn khỏi ứng dụng này nhưng ứng dụng quản trị có thể chọn hiển thị trường đó. Xác minh rằng bạn có thể đăng và nhận trường bí mật. Tạo mô hình DTO:
2 Cập nhật
6 để sử dụng
7:
3 Xác minh rằng bạn không thể đăng hoặc lấy trường bí mật. Gọi API web bằng JavaScriptXem Hướng dẫn: Gọi API web ASP.NET Core bằng JavaScript. Loạt video API WebXem Video: Loạt bài dành cho Người mới bắt đầu về: API Web. Các mẫu ứng dụng web đáng tin cậyXem Bài viết và mẫu ứng dụng web đáng tin cậy dành cho.NET trên YouTube để biết hướng dẫn về cách tạo ứng dụng ASP.NET Core hiện đại, đáng tin cậy, hiệu quả, có thể kiểm tra, tiết kiệm chi phí và có thể mở rộng, cho dù là từ đầu hay tái cấu trúc một ứng dụng hiện có. Thêm hỗ trợ xác thực vào API webASP.NET Core Identity bổ sung chức năng đăng nhập giao diện người dùng (UI) cho các ứng dụng web ASP.NET Core. Để bảo mật API web và SPA, hãy sử dụng một trong các cách sau:
Duende Identity Server là một khung OpenID Connect và OAuth 2.0 cho ASP.NET Core. Duende Identity Server kích hoạt các tính năng bảo mật sau:
Phần mềm Duende có thể yêu cầu bạn trả phí giấy phép để sử dụng sản xuất Máy chủ nhận dạng Duende. Để biết thêm thông tin, hãy xem . Để biết thêm thông tin, hãy xem tài liệu Máy chủ Nhận dạng Duende (trang web Phần mềm Duende).Xuất bản lên AzureĐể biết thông tin về cách triển khai lên Azure, hãy xem Bắt đầu nhanh: Triển khai ứng dụng web ASP.NET. |