Saya suka fakta bahwa ASP.NET Core's MVC6 menggabungkan dua pola menjadi satu karena saya sering perlu mendukung kedua dunia. Meskipun benar bahwa Anda dapat mengubah MVC standar apa pun Controller
(dan / atau mengembangkan ActionResult
kelas Anda sendiri ) untuk bertindak & berperilaku seperti ApiController
, itu bisa sangat sulit untuk mempertahankan dan menguji: di atas itu, memiliki metode Pengendali kembali ActionResult
dicampur dengan yang lain mengembalikan mentah / serial / IHttpActionResult
data bisa sangat membingungkan dari perspektif pengembang, terutama jika Anda tidak bekerja sendiri dan perlu membawa pengembang lain untuk mempercepat dengan pendekatan hybrid.
Teknik terbaik yang saya lakukan sejauh ini untuk meminimalkan masalah itu dalam aplikasi web non-Core ASP.NET adalah mengimpor (dan mengonfigurasi dengan benar) paket Web API ke dalam Aplikasi Web berbasis-MVC, sehingga saya dapat memiliki yang terbaik dari keduanya worlds: Controllers
for Views, ApiControllers
untuk data.
Untuk melakukan itu, Anda perlu melakukan hal berikut:
- Instal paket Web API berikut menggunakan NuGet:
Microsoft.AspNet.WebApi.Core
dan Microsoft.AspNet.WebApi.WebHost
.
- Tambahkan satu atau lebih ApiControllers ke
/Controllers/
folder Anda .
- Tambahkan file WebApiConfig.cs berikut ke
/App_Config/
folder Anda :
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 }
);
}
}
Terakhir, Anda harus mendaftarkan kelas di atas ke kelas Startup Anda (salah satu Startup.cs
atau Global.asax.cs
, tergantung apakah Anda menggunakan template Startup OWIN atau tidak).
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);
// ...
}
Pendekatan ini - bersama dengan pro dan kontra - dijelaskan lebih lanjut dalam posting ini yang saya tulis di blog saya.
ApiController
danController
jadi jika Anda menggunakan .NET yang lebih baru, Anda tidak perlu lagi khawatir tentang ApiController - docs.microsoft.com/en-us/aspnet/core/tutorials/first-web- api