Chủ đề của PRN232 - Xây dựng ứng dụng back-end đa nền tảng với .NET

PRN232 Chương 4 - Model Binding, Validation và Routing

Chương 4 môn PRN232 tập trung vào chặng tiếp nhận request: Model Binder dựng đối tượng C# từ route data, query string và request body, quy tắc binding source parameter inference của [ApiController] cùng các attribute FromBody, FromQuery, FromRoute, FromHeader, attribute routing và tham số route, kiểm tra dữ liệu bằng Data Annotations như Required, StringLength, EmailAddress và RegularExpression, cơ chế tự trả 400 Bad Request khi ModelState.IsValid sai, và chọn đúng ActionResult như NotFound. Trọn bộ câu hỏi trắc nghiệm có giải thích.

Xem danh sách câu hỏi19 câu hỏi95% có giải thích

Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.

Học ngân hàng câu hỏi của chủ đề

Luyện tập theo chủ đề này

19Câu hỏi hiện có

Câu hỏi của chủ đề

19/19 câuHết danh sách
Đề bài
public ActionResult<Product> GetProduct(int id) {
  var product = _productService.GetById(id);
  if (product == null) {
    return ???;
    // What should be here?
  }
  return product;
}
AOk()
BNotFound()
CBadRequest()
DNoContent()
Mở trang câu hỏi này →
A[FromQuery]
B[FromBody]
C[FromRoute]
D[FromHeader]
Lời giải
Theo các quy tắc suy luận, bất kỳ tham số kiểu phức tạp nào không được đăng ký trong hộp chứa DI và không khớp với tham số đường dẫn sẽ được suy luận đến từ đâu?
Mở trang câu hỏi này →
AFrom the query string.
BFrom the request body.
CFrom the route data.
DFrom the request headers.
Lời giải
Khi sử dụng [ApiController] trong ASP.NET Core, model binder sẽ cố gắng lấy dữ liệu cho tham số kiểu phức tạp (như một lớp hoặc bản ghi) từ đâu? Theo mặc định, model binder sẽ lấy dữ liệu từ cơ thể yêu cầu (request body). Điều này có nghĩa là dữ liệu sẽ được gửi qua trong nội dung của yêu cầu HTTP, thường là dưới dạng JSON hoặc XML. Điều này giúp cho việc truyền dữ liệu phức tạp trở nên dễ dàng hơn và giúp cho việc xử lý dữ liệu trở nên linh hoạt hơn. Tuy nhiên, người dùng cũng có thể sử dụng các thuộc tính khác nhau để chỉ định nguồn dữ liệu cho model binder, chẳng hạn như [FromBody], [FromQuery] hoặc [FromRoute].
Mở trang câu hỏi này →
Aapp.MapControllers();
Bapp.UseControllerRouting();
Capp.EnableControllerSupport();
Dapp.UseStaticFiles();
Lời giải
Trong một ứng dụng Web API truyền thống dựa trên controller trong .NET 8/9, phương thức gọi trong Program.cs quan trọng nhất cho việc định tuyến đến các controller là app.MapControllers(). Phương thức này cho phép ứng dụng nhận biết và xử lý các yêu cầu HTTP đến các controller. Khi bạn gọi app.MapControllers(), bạn đang cho phép ứng dụng .NET sử dụng tính năng routing mặc định để định tuyến các yêu cầu đến các controller phù hợp. Điều này giúp bạn có thể sử dụng các controller để xử lý các yêu cầu HTTP và trả về các phản hồi phù hợp.
Mở trang câu hỏi này →
AQuery string parameters
BRoute parameters
CRequest headers
DForm data fields
Lời giải
Trong câu hỏi này, chúng ta được hỏi về cách định nghĩa tham số trong đường dẫn (route) của một API. Đường dẫn được định nghĩa trong câu lệnh [HttpGet("users/{userId}/orders/{orderId}")].
Mở trang câu hỏi này →
AOnly in the request body.
BIn the route data, then the query string, then form data.
COnly in the request headers.
DIt will not look anywhere and will throw an exception.
Lời giải
Khi thực hiện hành động Get với phương thức public IActionResult Get(int id), và không có bất kỳ thuộc tính nào khác, thì bộ gắn model sẽ tìm kiếm giá trị của id theo mặc định ở đâu? Bộ gắn model sẽ tìm kiếm giá trị của id ở dữ liệu route (dữ liệu đường dẫn), sau đó là query string (dữ liệu tham số trong URL), và cuối cùng là dữ liệu form (dữ liệu được gửi qua form). Điều này là do ASP.NET Core sử dụng một bộ gắn model mặc định để gắn giá trị vào các thuộc tính của controller. Bộ gắn model này sẽ ưu tiên tìm kiếm giá trị trong dữ liệu route, sau đó là query string, và cuối cùng là dữ liệu form. Điều này giúp cho việc gắn model trở nên dễ dàng và linh hoạt hơn.
Mở trang câu hỏi này →
AManually checking ModelState.IsValid in every action.
BThe [ApiController] attribute automatically handles it.
CUsing a custom middleware to inspect every request.
DRelying on the database to throw an exception.
Lời giải
Trong một ứng dụng Web API .NET 8, cách xử lý lỗi xác thực mô hình tự động và trả về trạng thái 400 Bad Request được khuyến nghị như sau. Trước đây, để kiểm tra lỗi xác thực mô hình, chúng ta thường phải kiểm tra trạng thái `ModelState.IsValid` trong mỗi hành động. Tuy nhiên, từ .NET 6 trở lên, khi áp dụng tính năng API Controller, việc xử lý lỗi xác thực mô hình đã được tự động hóa. Khi áp dụng tính năng này, khi có lỗi xác thực mô hình, hệ thống sẽ tự động trả về trạng thái 400 Bad Request cùng với thông tin lỗi. Điều này giúp giảm thiểu mã nguồn và tăng cường tính bảo mật cho ứng dụng.
Mở trang câu hỏi này →
AThe action method still executes as normal.
BAn HTTP 500 Internal Server Error is returned.
CThe request is automatically rejected with an HTTP 400 Bad Request response containing details of the validation errors.
DThe application logs the error and returns an HTTP 200 OK.
Lời giải
Khi một controller được trang bị [ApiController], nếu ModelState.IsValid là false, điều gì sẽ xảy ra tự động? Điều này có nghĩa là khi bạn gửi một yêu cầu đến controller và dữ liệu yêu cầu không hợp lệ, hệ thống sẽ tự động trả về một phản hồi HTTP 400 Bad Request. Phản hồi này sẽ chứa chi tiết về các lỗi xác thực. Điều này giúp người dùng biết rõ về các lỗi mà họ đã mắc phải và có thể sửa đổi dữ liệu yêu cầu một cách chính xác. Ngoài ra, hệ thống cũng sẽ không thực hiện hành động nào khác, vì ModelState.IsValid là điều kiện tiên quyết để thực hiện hành động. Vì vậy, nếu ModelState.IsValid là false, hệ thống sẽ tự động trả về phản hồi HTTP 400 Bad Request và dừng lại.
Mở trang câu hỏi này →
Đề bài
app.MapGet("/products/{id}", (int id) => {
  // Logic to find a product by id return Results.Ok($"Product {id
}
"); }

);

AIt defines an endpoint that creates a new product.
BIt defines an endpoint that retrieves a product by its ID using a POST request.
CIt defines an endpoint that retrieves a product by its ID using a GET request.
DIt defines an endpoint that deletes a product by its ID.
Lời giải
Mã nguồn C# này tạo một endpoint trong ứng dụng .NET. Endpoint này được định nghĩa bằng cách sử dụng phương thức MapGet. Phương thức này cho phép tạo một endpoint có thể được truy cập bằng phương thức GET. Trong trường hợp này, endpoint được định nghĩa tại đường dẫn /products/{id}, nơi {id} là một tham số được truyền vào. Tham số này được định nghĩa bằng cách sử dụng toán tử (int id), điều này cho phép chỉ chấp nhận giá trị là số nguyên. Logic bên trong endpoint này là tìm một sản phẩm dựa trên ID được truyền vào. Sau khi tìm thấy sản phẩm, endpoint sẽ trả về một phản hồi có trạng thái OK và nội dung là chuỗi 'Sản phẩm {id}'. Điều này cho thấy endpoint này được sử dụng để tìm và trả về thông tin về một sản phẩm dựa trên ID của nó.
Mở trang câu hỏi này →
Đề bài
for this action? [HttpPut("{id}")] public IActionResult UpdateProduct(int id, [FromBody] Product product) {
  // Logic to update the product return NoContent();
}
AGET
BPOST
CPUT
DDELETE
Lời giải
Để xác định HTTP verb phù hợp cho hành động cập nhật sản phẩm, chúng ta cần xem xét mục đích của hành động này. Hành động cập nhật sản phẩm là một hành động thay đổi trạng thái của sản phẩm hiện có. Trong HTTP, có bốn phương thức chính: GET, POST, PUT và DELETE. Mỗi phương thức có một mục đích riêng biệt. GET dùng để đọc dữ liệu, POST dùng để tạo mới dữ liệu, PUT dùng để cập nhật dữ liệu và DELETE dùng để xóa dữ liệu. Vì hành động cập nhật sản phẩm là thay đổi trạng thái của sản phẩm hiện có, nên phương thức phù hợp nhất cho hành động này là PUT. Phương thức PUT cho phép gửi một bản sao của tài nguyên đã tồn tại đến máy chủ, và máy chủ sẽ cập nhật tài nguyên đó. Trong trường hợp này, hành động cập nhật sản phẩm được định nghĩa bằng phương thức PUT, và nó nhận một id sản phẩm và một bản sao của sản phẩm từ cơ thể yêu cầu. Sau khi cập nhật sản phẩm, hành động này trả về trạng thái 204 No Content, cho biết sản phẩm đã được cập nhật thành công.
Mở trang câu hỏi này →
11To bind a parameter to a request header, which attribute is used?4 lựa chọnTrung bình50% trả lời đúng
A[FromHeader]
B[FromHead]
C[BindHeader]
D[InHeader]
Lời giải
Để gắn một tham số vào một yêu cầu tiêu đề, bạn cần sử dụng thuộc tính nào?
Mở trang câu hỏi này →
A[Format]
B[Pattern]
C[StringLength]
D[RegularExpression]
Lời giải
Để xác minh một thuộc tính theo một mẫu tùy chỉnh, chẳng hạn như một định dạng cụ thể cho mã sản phẩm (ví dụ: "PROD-1234"), thì thuộc tính nào phù hợp nhất?
Mở trang câu hỏi này →
AThe process of guessing the data types of action parameters.
BA feature where ASP.NET Core automatically applies binding source attributes ([FromRoute], [FromBody], etc.) based on conventions, reducing boilerplate code.
CThe ability to infer validation rules from property names.
DA mechanism for the client to tell the server where to find data.
Lời giải
Binding source parameter inference là một tính năng trong ASP.NET Core, được sử dụng trong các controller được đánh dấu bằng [ApiController]. Tính năng này cho phép ASP.NET Core tự động áp dụng các thuộc tính nguồn dữ liệu ([FromRoute], [FromBody], v.v.) dựa trên các quy ước, giảm thiểu mã nguồn lặp. Điều này giúp các nhà phát triển có thể tập trung vào việc xây dựng logic nghiệp vụ mà không cần phải viết mã nguồn để áp dụng các thuộc tính nguồn dữ liệu. Ví dụ, khi bạn tạo một controller với một phương thức hành động có tham số, ASP.NET Core sẽ tự động áp dụng thuộc tính nguồn dữ liệu phù hợp dựa trên quy ước. Điều này giúp giảm thiểu mã nguồn và tăng cường hiệu suất phát triển.
Mở trang câu hỏi này →
14What is the fundamental role of a Model Binder in ASP.NET Core?4 lựa chọnDễ100% trả lời đúng
ATo convert C# model objects into JSON or XML for the response.
BTo create instances of C# objects by extracting data from an incoming HTTP request (e.g., from the route, query string, or body).
CTo bind a database model to a DbContext.
DTo validate the properties of a model.
Lời giải
Trong ASP.NET Core, Model Binder đóng vai trò quan trọng trong việc tạo ra các đối tượng C# từ dữ liệu được gửi qua HTTP request. Nó có thể lấy dữ liệu từ các nguồn khác nhau như đường dẫn, chuỗi truy vấn hoặc cơ thể yêu cầu. Model Binder sẽ tạo ra các đối tượng C# dựa trên dữ liệu được gửi và giúp chúng ta dễ dàng truy cập và sử dụng dữ liệu đó trong ứng dụng. Ví dụ, khi gửi một form qua HTTP POST, Model Binder sẽ tạo ra một đối tượng C# dựa trên dữ liệu được gửi và giúp chúng ta dễ dàng truy cập các thuộc tính của đối tượng đó. Điều này giúp giảm thiểu mã code và tăng hiệu suất của ứng dụng.
Mở trang câu hỏi này →
AIt is the only way to define routes in minimal APIs.
BIt keeps the route definition next to the action method that it maps to, improving locality and discoverability.
CIt offers significantly better performance than conventional routing.
DIt is required for enabling Swagger/OpenAPI documentation.
Lời giải
Attribute routing là một phương pháp định tuyến trong ASP.NET Core, giúp người lập trình viên định nghĩa các tuyến đường (route) dựa trên các thuộc tính (attribute) của phương thức hành động (action method). Điều này giúp cải thiện tính cục bộ (locality) và tính dễ khám phá (discoverability) của mã nguồn. Khi sử dụng attribute routing, người lập trình viên có thể định nghĩa các tuyến đường ngay trong phương thức hành động mà nó tương ứng, thay vì phải định nghĩa chúng trong một file riêng biệt. Điều này giúp giảm thiểu sự phức tạp và tăng cường tính dễ hiểu của mã nguồn.
Mở trang câu hỏi này →
ATo define the database connection string.
BTo enforce validation rules for the model's data.
CTo specify the controller that uses the model.
DTo add comments to the code for documentation.
Lời giải
Trong ASP.NET Core, các chú thích dữ liệu (Data Annotations) như [Required] và [StringLength] được sử dụng để định nghĩa các quy tắc xác thực cho dữ liệu của mô hình. Những chú thích này cho phép bạn xác định các yêu cầu bắt buộc và giới hạn độ dài cho các thuộc tính của mô hình. Ví dụ, bạn có thể sử dụng [Required] để yêu cầu một thuộc tính không được để trống, hoặc [StringLength] để giới hạn độ dài của một chuỗi. Những quy tắc này sẽ được áp dụng khi bạn tạo hoặc cập nhật dữ liệu cho mô hình, giúp đảm bảo rằng dữ liệu luôn được hợp lệ và chính xác. Ngoài ra, những chú thích này cũng giúp bạn dễ dàng xác định và sửa lỗi các vấn đề liên quan đến dữ liệu không hợp lệ.
Mở trang câu hỏi này →
A500 Internal Server Error
B404 Not Found
C400 Bad Request
D200 OK
Lời giải
Khi người dùng cung cấp dữ liệu không hợp lệ trong cơ thể yêu cầu, trạng thái HTTP phù hợp nhất để trả về là trạng thái lỗi yêu cầu không hợp lệ. Điều này xảy ra khi máy chủ nhận được yêu cầu nhưng không thể xử lý do dữ liệu không hợp lệ. Trạng thái lỗi này cho biết yêu cầu không hợp lệ và yêu cầu người dùng cung cấp dữ liệu hợp lệ. Ví dụ, khi người dùng nhập sai địa chỉ email hoặc mật khẩu, trạng thái lỗi này sẽ được trả về.
Mở trang câu hỏi này →
A[Email]
B[IsEmail]
C[EmailAddress]
D[RegularExpression(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$")]
Lời giải
Để xác định một thuộc tính là một địa chỉ email hợp lệ, bạn cần sử dụng thuộc tính [EmailAddress]. Đây là thuộc tính được sử dụng để xác minh rằng giá trị nhập vào có đúng định dạng email. Ví dụ, khi bạn nhập vào địa chỉ email như 'example@gmail.com', thuộc tính [EmailAddress] sẽ xác nhận rằng nó có đúng định dạng và không có lỗi. Ngoài ra, bạn cũng có thể sử dụng thuộc tính [IsEmail] để thực hiện chức năng tương tự, nhưng [EmailAddress] là lựa chọn phổ biến hơn và được sử dụng rộng rãi trong các ứng dụng.
Mở trang câu hỏi này →
AModel Binding
BData Seeding
CDependency Injection
DMiddleware Mapping
Lời giải
Trong khi xây dựng ứng dụng Web API, việc liên kết dữ liệu JSON đến mô hình dữ liệu là một bước quan trọng. Có nhiều phương pháp có thể được sử dụng để thực hiện việc này, nhưng phương pháp phổ biến nhất là Model Binding. Model Binding cho phép tự động liên kết dữ liệu JSON đến các thuộc tính của mô hình dữ liệu dựa trên tên và loại dữ liệu. Điều này giúp giảm thiểu mã nguồn và tăng cường hiệu suất của ứng dụng. Ngoài ra, Model Binding cũng hỗ trợ các tính năng như kiểm tra dữ liệu và xử lý lỗi, giúp đảm bảo rằng dữ liệu được liên kết chính xác và an toàn.
Mở trang câu hỏi này →

Đề có câu hỏi của chủ đề này

3 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.