2016-07-29 17 views
18

Có đúng không, rằng "ApiController sẽ không được dùng nữa trong .NET Core"? Tôi thực sự cần sự hiểu biết chuyên nghiệp về điều này. Vì tôi dự định sử dụng nó trong các dự án mới.ApiController không được chấp nhận trong .NET Core

+6

Trả lời ngắn gọn: Có. Câu trả lời không quá ngắn: Asp.Net MVC và Asp.Net Web API đã được hợp nhất thành một cơ sở mã trong asp.net-core. Vì vậy, tất cả chúng đều thừa kế từ 'Controller' và tất cả có thể trả về việc triển khai' IActionResult'. Có thể là 'Chế độ xem' cho MVC hoặc 'Json' cho api trên web. Bạn cấu hình lõi dựa trên những gì bạn cần. https://docs.asp.net/en/latest/intro.html – Nkosi

Trả lời

21

Có thực sự đặc biệt là ApiController lớp nữa vì MVC và WebAPI đã được hợp nhất trong ASP.NET Core. Tuy nhiên, lớp Controller của MVC mang lại một loạt các tính năng mà bạn có thể sẽ không cần khi phát triển một API Web, chẳng hạn như một khung nhìn và ràng buộc mô hình.

Bạn đã có hai lựa chọn nếu bạn muốn một cái gì đó khác nhau:

Sử dụng các lớp ControllerBase trong gói Microsoft.AspNetCore.Mvc.Core.

Hoặc

Tạo lớp ApiController cơ sở của bạn.Chìa khóa ở đây là để thêm thuộc tính [ActionContext] mà tiêm hiện hành ActionContext dụ vào bất động sản:

[Controller] 
public abstract class ApiController 
{ 
    [ActionContext] 
    public ActionContext ActionContext { get; set; } 
} 

Ngoài ra, thêm thuộc tính [Controller] đến lớp để đánh dấu nó như một bộ điều khiển cho bộ điều khiển phát hiện MVC.

Xem thêm chi tiết trong số “Web API in MVC 6” blogpost của tôi.

+0

Thực sự hữu ích của nó ... – Viji

+0

Đó thực sự chính xác là những gì 'ApiController' từ gói Tương thích WebApi Shim Gói nào , nó chỉ gắn kết nhiều thuộc tính hơn nhưng tất cả chúng đều dựa trên ControlerContext được tiêm qua thuộc tính https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/ApiController.cs#L36-L43 nhưng đi kèm với nhiều thứ tương thích hơn (đó là tùy chọn hoàn toàn), như đăng ký tuyến đường https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.WebApiCompatShim/Routing/WebApiCompatShimRouteBuilderExtensions.cs#L13 hoặc WebApi2 esque Thuộc tính – Tseng

8

Trong ASP.NET lõi sử dụng các thuật ngữ và khái niệm được biết đến từ ASP.NET MVC và ASP.NET WepAPI. Nhưng về cơ bản nó là một khuôn khổ hoàn toàn mới. Do đó, có một số khái niệm hoặc các lớp cơ sở mà chúng ta có thể chỉ đơn giản là quên.

ASP.NET MVC và ASP.NET WebApi là hai khung công tác song song và khác nhau và do đó cần phải xác định một bộ điều khiển dưới dạng Bộ điều khiển WebApi bằng cách sử dụng lớp cơ sở ApiController.

Trong ASP.NET Core, điều này đơn giản là không cần thiết nữa. Lớp cơ sở Controller có thể được sử dụng cho các hành động trả về HTML từ Chế độ xem dao cạo hoặc JSON (với định dạng đầu ra XML và các định dạng khác cũng có thể). Bạn thậm chí không cần lớp cơ sở Controller. Thậm chí có thể sử dụng "Plain Old C# Object" làm Bộ điều khiển không có kế thừa. Đây là một ví dụ về Demo-Controller để phác thảo, mặc dù ApiController không có ở đó, cách tiếp cận cấu trúc để phân phối dữ liệu cho khách hàng là tương tự.

public class DemoController : Controller 
{  
    public async Task<IActionResult> Action() 
    { 
     var model = await _someService.GetPreciousData(); 
     return Ok(model); 
    } 
} 
+0

Cảm ơn sự thấu hiểu – Viji

4

Như những người khác đã đề cập, ASP.NET Core là một webstack hoàn toàn mới không tương thích với webstack ASP.NET MVC cũ. Điều này được phản ánh rõ ràng trong tên và phiên bản của nó!

ASP.NET Core và ASP.NET Core MVC có phiên bản 1.0.0 để làm cho tính không tương thích này rất rõ ràng.

ASP.NET Core hợp nhất MVC và WebApi thành một Api duy nhất được gọi.

Và đây là điều bạn có thể đã được tìm kiếm:

Nếu bạn đang chuyển từ một ứng dụng ASP.NET MVC hoặc ASP.NET WebAPI trước, bạn có thể muốn nhập khẩu các gói Microsoft.AspNetCore.Mvc.WebApiCompatShim cung cấp một số các loại tương thích giúp việc di chuyển dễ dàng hơn so với các phiên bản trước. Trong số đó là lớp ApiController và các thuộc tính nhất định đã bị xóa trong Api webstack mới.

Tuy nhiên, xin lưu ý rằng đây chỉ là để giúp bạn di chuyển các ứng dụng hiện có. Khi bạn tạo một ứng dụng mới, bạn không nên sử dụng tính năng tương thích này và chỉ sử dụng các công cụ mới.

+0

Cảm ơn những mẹo di chuyển – Viji

Các vấn đề liên quan