Tôi yêu sự thật rằng MVC6 của ASP.NET Lõi sáp nhập hai mô hình thành một vì tôi thường cần phải hỗ trợ cả hai thế giới.Mặc dù bạn có thể tinh chỉnh bất kỳ tiêu chuẩn nào của MVC Controller
(và/hoặc phát triển các lớp ActionResult
riêng của mình) để hành động & hoạt động giống như một ApiController
, có thể rất khó duy trì và kiểm tra: trên hết, có Bộ điều khiển các phương thức trả lại ActionResult
được trộn lẫn với các dữ liệu khác được trả về/dữ liệu IHttpActionResult
có thể rất khó hiểu từ góc độ nhà phát triển, đặc biệt là nếu bạn không làm việc một mình và cần phải đưa các nhà phát triển khác tăng tốc với phương pháp lai đó. Kỹ thuật tốt nhất mà tôi đã đi xa để giảm thiểu vấn đề đó trong các ứng dụng web ASP.NET không phải là cốt lõi là nhập (và cấu hình đúng) gói Web API vào Ứng dụng Web dựa trên MVC, vì vậy tôi có thể có tốt nhất của cả hai thế giới: Controllers
cho Chế độ xem, ApiControllers
cho dữ liệu.
Để làm được điều đó, bạn cần phải làm như sau:
- Cài đặt các gói Web API sau sử dụng NuGet:
Microsoft.AspNet.WebApi.Core
và Microsoft.AspNet.WebApi.WebHost
.
- Thêm một hoặc nhiều ApiControllers vào thư mục
/Controllers/
của bạn.
- Thêm WebApiConfig.cs sau tập tin vào thư mục
/App_Config/
của bạn:
using System.Web.Http;
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Cuối cùng, bạn sẽ cần phải đăng ký lớp ở trên để Startup lớp học của bạn (hoặc Startup.cs
hoặc Global.asax.cs
, tùy thuộc vào việc bạn đang sử dụng mẫu Khởi động OWIN hay không).
Startup.cs
public void Configuration(IAppBuilder app)
{
// Register Web API routing support before anything else
GlobalConfiguration.Configure(WebApiConfig.Register);
// The rest of your file goes there
// ...
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ConfigureAuth(app);
// ...
}
Global.asax.cs
protected void Application_Start()
{
// Register Web API routing support before anything else
GlobalConfiguration.Configure(WebApiConfig.Register);
// The rest of your file goes there
// ...
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// ...
}
Cách tiếp cận này - cùng với những ưu và khuyết điểm của nó - được giải thích thêm trong the following post.
Quan trọng: ASPNET Core đã 'hợp nhất' 'ApiController' và 'Bộ điều khiển' vì vậy nếu bạn đang sử dụng .NET mới hơn, bạn không cần lo lắng về ApiController nữa - https://docs.microsoft.com/vi -us/aspnet/core/tutorials/first-web-api –
Rất vui khi họ đã làm! Tôi dự đoán điều này ngược lại bằng cách http://prideparrot.com/blog/archive/2012/10/asp_net_mvc_vs_webapi – VJAI