Những loại Action Results trong ASP.NET Core
Trong chương này, chúng tôi sẽ thảo luận về Kết quả hành động. Trong các chương trước, chúng ta đã sử dụng các lớp C # đơn giản làm bộ điều khiển. Các lớp này không xuất phát từ một lớp cơ sở và bạn có thể sử dụng cách tiếp cận này với MVC, nhưng phổ biến hơn là lấy một bộ điều khiển từ một lớp cơ sở của bộ điều khiển được cung cấp trong không gian tên Microsoft.AspNet.Mvc.
- Lớp cơ sở này cung cấp cho chúng tôi quyền truy cập vào nhiều thông tin theo ngữ cảnh về một yêu cầu, cũng như các phương thức giúp chúng tôi xây dựng kết quả để gửi lại cho khách hàng.
- Bạn có thể gửi lại các chuỗi và số nguyên đơn giản trong một phản hồi. Bạn cũng có thể gửi lại các đối tượng phức tạp như một đối tượng để đại diện cho sinh viên hoặc trường đại học hoặc nhà hàng, v.v. và tất cả dữ liệu liên quan đến đối tượng đó.
- Các kết quả này thường được gói gọn trong một đối tượng thực hiện giao diện IActionResult.
- Có nhiều loại kết quả khác nhau thực hiện giao diện này - loại kết quả có thể chứa mô hình hoặc nội dung của tệp để tải xuống.
- Các loại kết quả khác nhau này có thể cho phép chúng tôi gửi lại JSON cho khách hàng hoặc XML hoặc chế độ xem xây dựng HTML.
Hành động về cơ bản trả về các loại kết quả hành động khác nhau. Lớp ActionResult là cơ sở cho tất cả các kết quả hành động. Sau đây là danh sách các loại kết quả hành động khác nhau và hành vi của họ.
Name | Behavior |
---|---|
ContentResult | Returns a string |
FileContentResult | Returns file content |
FilePathResult | Returns file content |
FileStreamResult | Returns file content. |
EmptyResult | Returns nothing |
JavaScriptResult | Returns script for execution |
JsonResult | Returns JSON formatted data |
RedirectToResult | Redirects to the specified URL |
HttpUnauthorizedResult | Returns 403 HTTP Status code |
RedirectToRouteResult | Redirect to different action/ different controller action |
ViewResult | Received as a response for view engine |
PartialViewResult | Received as a response for view engine |
Thí dụ 1
Chúng ta hãy thực hiện một ví dụ đơn giản bằng cách mở lớp HomeContoder và lấy nó từ lớp dựa trên bộ điều khiển. Lớp cơ sở này nằm trong không gian tên Microsoft.AspNet.Mvc. Sau đây là việc triển khai lớp HomeContoder.
using Microsoft.AspNet.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace FirstAppdemo.Controllers { public class HomeController : Controller { public ContentResult Index() { return Content("Hello, World! this message is from Home Controller using the Action Result"); } } }
Bây giờ bạn có thể thấy rằng phương thức chỉ mục đang trả về ContentResult, một trong những loại kết quả và tất cả các loại kết quả này thực hiện cuối cùng là một giao diện, đó là ActionResult.
Trong phương thức Index, chúng tôi đã chuyển một chuỗi vào phương thức Content. Phương thức Nội dung này tạo ra ContentResult; điều này có nghĩa là phương thức Index sẽ trả về ContentResult.
Hãy để chúng tôi lưu lớp HomeContoder và chạy ứng dụng trong trình duyệt. Nó sẽ tạo ra các trang sau.
Bây giờ bạn có thể thấy một phản hồi không giống với phản hồi mà chúng tôi có trước đây. Nó vẫn chỉ là một phản ứng văn bản đơn giản.
- Bạn có thể tự hỏi lợi thế của việc sử dụng thứ gì đó tạo ra ActionResult là gì.
- Ưu điểm điển hình là nó chỉ là một cách chính thức để gói gọn quyết định của bộ điều khiển.
- Trình điều khiển quyết định những việc cần làm tiếp theo, trả về một chuỗi hoặc HTML hoặc trả về một đối tượng mô hình có thể được tuần tự hóa thành JSON, v.v.
- Tất cả những gì bộ điều khiển cần làm là đưa ra quyết định đó và bộ điều khiển không phải ghi trực tiếp vào phản hồi kết quả của quyết định.
- Nó chỉ cần trả lại quyết định và sau đó chính là khung sẽ đưa ra kết quả và hiểu cách chuyển đổi kết quả đó thành thứ gì đó có thể được gửi lại qua HTTP.
Thí dụ 2
Hãy để chúng tôi lấy một ví dụ khác. Tạo một thư mục mới trong dự án và gọi nó là Mô hình. Trong thư mục Mô hình, chúng tôi muốn thêm một lớp có thể đại diện cho Nhân viên.
Nhập Employee.cs vào trường Tên như trong ảnh chụp màn hình ở trên. Ở đây, việc thực hiện lớp Nhân viên chứa hai thuộc tính.
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace FirstAppDemo.Models { public class Employee { public int ID { get; set; } public string Name { get; set} } }
Bên trong phương thức hành động Index của HomeContoder, chúng tôi muốn trả về một đối tượng Nhân viên. Sau đây là việc thực hiện HomeContoder.
using FirstAppDemo.Models; using Microsoft.AspNet.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace FirstAppdemo.Controllers { public class HomeController : Controller { public ObjectResult Index() { var employee = new Employee { ID = 1, Name = "Mark Upston"}; return new ObjectResult(employee); } } }
Bây giờ, thay vì trả về Nội dung, chúng tôi sẽ trả về một loại kết quả khác được gọi là ObjectResult. Nếu chúng ta muốn có một ObjectResult, chúng ta cần tạo hoặc khởi tạo một ObjectResult và truyền vào nó một số đối tượng mô hình.
- ObjectResult đặc biệt trong khung MVC vì khi chúng ta trả về ObjectResult, khung MVC sẽ nhìn vào đối tượng này. Đối tượng này cần được thể hiện trong phản hồi HTTP.
- Đối tượng này phải được tuần tự hóa thành XML hoặc JSON hoặc một số định dạng khác và cuối cùng, quyết định sẽ được đưa ra dựa trên thông tin cấu hình mà bạn đưa ra cho MVC khi khởi động. Nếu bạn không định cấu hình bất cứ điều gì, bạn chỉ cần nhận được một số giá trị mặc định và mặc định là phản hồi JSON.
Lưu tất cả các tập tin của bạn và làm mới trình duyệt. Bạn sẽ thấy đầu ra sau đây.