Saya telah bermain-main dengan ASP.NET MVC 4 beta dan saya melihat dua jenis pengendali sekarang: ApiController
dan Controller
.
Saya agak bingung pada situasi apa saya bisa memilih pengontrol tertentu.
Sebagai contoh: Jika saya ingin mengembalikan tampilan maka saya harus menggunakan ApiController
atau biasa Controller
? Saya sadar bahwa API Web WCF sekarang terintegrasi dengan MVC.
Karena sekarang kita dapat menggunakan kedua pengendali tersebut, tolong tolong tunjukkan situasi apa yang harus dilakukan untuk pengontrol yang sesuai.
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- apiJawaban:
Gunakan Pengontrol untuk membuat tampilan normal Anda. Tindakan ApiController hanya mengembalikan data yang diserialisasi dan dikirim ke klien.
ini tautannya
Mengutip:
ApiControllers memiliki spesialisasi dalam mengembalikan data. Misalnya, mereka menangani serialisasi data secara transparan ke dalam format yang diminta oleh klien. Juga, mereka mengikuti skema perutean yang berbeda secara default (seperti dalam: memetakan URL ke tindakan), menyediakan API REST-ful berdasarkan konvensi.
Anda mungkin dapat melakukan apa saja menggunakan Pengontrol alih-alih ApiController dengan beberapa (?) Pengkodean manual. Pada akhirnya, kedua kontroler dibangun di atas dasar ASP.NET. Tetapi memiliki API REST-ful adalah persyaratan yang umum saat ini sehingga WebAPI dibuat untuk menyederhanakan implementasi API semacam itu.
Cukup mudah untuk memutuskan di antara keduanya: jika Anda menulis aplikasi web / internet / intranet berbasis HTML - mungkin dengan panggilan AJAX sesekali mengembalikan json di sana-sini - tetap dengan MVC / Controller. Jika Anda ingin memberikan antarmuka data-driven / REST-ful ke sistem, pergi dengan WebAPI. Anda dapat menggabungkan keduanya, tentu saja, memiliki ApiController yang melayani panggilan AJAX dari halaman MVC.
Untuk memberikan contoh dunia nyata: Saat ini saya sedang bekerja dengan sistem ERP yang menyediakan API REST-ful untuk entitasnya. Untuk API ini, WebAPI akan menjadi kandidat yang baik. Pada saat yang sama, sistem ERP menyediakan aplikasi web yang sangat AJAX-ified yang dapat Anda gunakan untuk membuat kueri untuk API REST-ful. Aplikasi web itu sendiri dapat diimplementasikan sebagai aplikasi MVC, memanfaatkan WebAPI untuk mengambil meta-data dll.
sumber
Mana yang ingin Anda tulis dan pertahankan?
ASP.NET MVC
ASP.NET Web API
sumber
Controller
kelas.ApiController
hanya: Controller
bekerja, dapatkah Anda menambahkan contoh dot net core Controller baru jugaJson()
versinya. Ini lebih jelas dan lebih eksplisit. Saya tidak suka banyak ilmu hitam dalam mencoba mencari tahu bagaimana kode saya akan menanggapi permintaan.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 mengembangkanActionResult
kelas Anda sendiri ) untuk bertindak & berperilaku sepertiApiController
, itu bisa sangat sulit untuk mempertahankan dan menguji: di atas itu, memiliki metode Pengendali kembaliActionResult
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:
Microsoft.AspNet.WebApi.Core
danMicrosoft.AspNet.WebApi.WebHost
./Controllers/
folder Anda ./App_Config/
folder Anda :Terakhir, Anda harus mendaftarkan kelas di atas ke kelas Startup Anda (salah satu
Startup.cs
atauGlobal.asax.cs
, tergantung apakah Anda menggunakan template Startup OWIN atau tidak).Startup.cs
Global.asax.cs
Pendekatan ini - bersama dengan pro dan kontra - dijelaskan lebih lanjut dalam posting ini yang saya tulis di blog saya.
sumber
Controller
mengembalikan string berseri-seri Json yang dibungkus denganActionResult
jelas lebih sulit untuk diuji dan dipertahankan daripadaApiController
yang dapat diatur untuk secara langsung mengembalikan daftar[Serializable]
item. Metode pengujian apa pun akan jauh lebih mudah untuk ditulis, karena Anda tidak perlu melakukan de-serialisasi secara manual setiap kali: hal yang sama dapat dikatakan untuk hampir semua tugas integrasi sistem dengan ASP.NET atau kerangka kerja lainnya.Controllers
bagus, tetapiApiControllers
lebih cocok untuk tugas yang tenang, setidaknya di .NET Framework 4.xSetiap metode di Web API akan mengembalikan data (JSON) tanpa serialisasi.
Namun, untuk mengembalikan Data JSON di pengontrol MVC, kami akan menetapkan tipe Hasil Tindakan yang dikembalikan ke JsonResult dan memanggil metode Json pada objek kami untuk memastikannya dikemas dalam JSON.
sumber
Perbedaan utamanya adalah: API Web adalah layanan untuk klien apa pun, perangkat apa pun, dan Pengontrol MVC hanya melayani kliennya. Sama karena itu adalah platform MVC.
sumber
Cukup mudah untuk memutuskan di antara keduanya: jika Anda menulis aplikasi web / internet / intranet berbasis HTML - mungkin dengan panggilan AJAX sesekali mengembalikan json di sana-sini - tetap dengan MVC / Controller. Jika Anda ingin memberikan antarmuka data-driven / REST-ful ke sistem, pergi dengan WebAPI. Anda dapat menggabungkan keduanya, tentu saja, memiliki ApiController yang melayani panggilan AJAX dari halaman MVC. Pada dasarnya controller digunakan untuk mvc dan api-controller digunakan untuk Rest-API Anda dapat menggunakan keduanya dalam program yang sama dengan kebutuhan Anda
sumber