Saya sedang membangun aplikasi ASP.NET MVC yang merupakan klien-skrip berat, itu akan menggunakan JSON dan jQuery untuk memanipulasi DOM.
Pemahaman saya adalah Web API Controller dan MVC Controller dapat mengembalikan JSON.
Dengan skenario saya, haruskah saya menggunakan Pengontrol API Web atau Pengontrol MVC ?
json
asp.net-mvc
asp.net-web-api
Nil Pun
sumber
sumber
Jawaban:
Pengontrol API Web dapat dibuat dan dihosting di Aplikasi ASP.NET apa pun, bukan hanya aplikasi MVC. Dengan demikian, alasan yang jelas untuk membuat API Web adalah jika Anda tidak memiliki front-end MVC (mis. Layanan web klasik, RESTful yang diselenggarakan oleh perusahaan / organisasi Anda.)
Pengontrol MVC biasanya bergantung pada Kerangka MVC, jika Anda melihat templat default dan sebagian besar pekerjaan yang dilakukan oleh komunitas dan rekan Anda, Anda akan melihat bahwa hampir semua Pengendali MVC diimplementasikan dengan pandangan dalam pikiran.
Secara pribadi, saya menggunakan Pengontrol MVC ketika saya berniat menanggapi dengan Tampilan (), dan saya akan menggunakan API Web untuk apa pun yang tidak bergantung pada tampilan tertentu.
Ada peringatan, tentu saja, tetapi secara umum jika Anda tidak memerlukan perilaku Model Binding MVC, layanan Anda adalah data-sentris, dan operasi adalah Data-centric (misalnya operasi CRUD) maka Anda mungkin menginginkan 'Web API Controller 'Bukannya' Model-View Controller '. Sebaliknya, jika operasi Anda View-centric (mis. Mengantarkan halaman admin pengguna ke pengguna), atau Anda membutuhkan Pengikatan Model MVC untuk menghasilkan 'ajax partials' (sangat tidak mungkin), maka Anda akan menginginkan MVC Controller sebagai gantinya.
Secara pribadi, saya menggunakan pengontrol API Web untuk menggerakkan klien RESTful berbasis JSON, saya menggunakan pengontrol MVC untuk menangani perutean peramban dasar dan pengiriman SPA.
sumber
WebAPI adalah untuk membuat API. Jika Anda ingin seseorang dapat menggunakan API Anda dalam XML, JSON, dll. Anda dapat membuat api web.
Dalam kasus Anda, Anda hanya perlu berbicara dengan klien di JSON.
Meskipun situs web Anda sebagian besar skrip klien didorong Anda masih akan menggunakan ASP.NET MVC Controller kan? Dan karena Anda mungkin sudah secara logis membagi pengontrol Anda berdasarkan entitas maka masuk akal untuk menambahkan metode json serving di dalamnya sebagai lawan membuat kelas lain khusus untuk web api.
Jadi untuk situasi khusus Anda (jika saya mengerti dengan benar), saya akan tetap dengan Controllers.
sumber
Jawabannya bermuara pada pemisahan keprihatinan, kencangkan penciptaan layanan dan bergantung pada konvensi daripada konfigurasi.
Kontroler tanggung jawab utama adalah bekerja sebagai koordinator antara tampilan dan model Anda, tetapi sebagai tanggung jawab utama API adalah bekerja pada data. Dalam kasus konvensi API membuatnya sangat mudah untuk melakukan operasi CRUD. Di bawah ini adalah pemetaan antara operasi CRUD dan tindakan HTTP
Jadi dengan API Anda tidak perlu membuat tindakan terpisah dan mengaitkannya dengan tindakan HTTP.
sumber
Satu-satunya masalah yang saya miliki dengan ApiController adalah bahwa ia berbasis situs bukan berbasis area. Satu situs hanya dapat memiliki satu subfolder apicontroller untuk Anda beri nama metode pengontrol Anda. Ada situasi yang Anda mungkin ingin menduplikasi nama pengontrol di berbagai bidang:
domain.com/api/area1/controller1/
domain.com/api/area2/controller1/
Saya ingat ada beberapa pengaturan kode khusus untuk dapat melakukan ini tetapi tidak berfungsi secara default.
sumber
Saya setuju dengan jawaban Shaun Wilson (jawaban atas) tetapi tidak yakin mengapa karena saya hanya sedikit bingung dan masih mencoba memahami dengan firasat (mungkin salah) berikut -
Anda tahu, saya hanya tidak tahu bagaimana saya salah di sini dan saya bingung karena baris terakhir jawaban Shaun menyatakan "Saya menggunakan pengontrol MVC untuk menangani perutean peramban dasar dan pengiriman SPA." - mungkin saya tidak sepenuhnya tahu apa itu klien yang tenang ketika saya berasumsi itu bisa menjadi metode JavaScript yang menerima respons dalam bentuk JSON. ini adalah pos terdekat di Stackoverflow yang terkait dengan jarak jauh sebagai jawaban atas pertanyaan saya, jadi saya menjawab posting ini alih-alih kemungkinan menggandakan pertanyaan.
sumber
Dalam skenario ini, saya akan merekomendasikan WebApi karena sangat cocok untuk mentransfer data seperti ini berdasarkan permintaan Javascript. Saya biasanya akan mengembangkan pengontrol WebApi saya sehingga mereka mengembalikan objek ramah JSON yang kemudian dapat diuraikan dengan mudah oleh Javascript saya.
Satu-satunya waktu nyata di mana Anda ingin menggunakan aksi pada pengontrol MVC untuk hal semacam ini adalah jika Anda ingin menghasilkan beberapa HTML dan mengganti segmen halaman Anda dengan panggilan Javascript.
Sebagai contoh:
Anda memiliki JQuery UI Datepicker yang setelah dipilih menghasilkan daftar tombol radio yang mewakili acara pada hari yang dipilih.
Dalam skenario ini, Anda bisa menggunakan WebApi untuk mengembalikan beberapa JSON dan kemudian menghasilkan HTML yang diperlukan menggunakan Javascript tetapi umumnya merupakan praktik yang buruk untuk membuat banyak HTML menggunakan Javascript. Akan jauh lebih baik untuk memiliki C # membangun HTML dan kemudian mengembalikannya melalui tampilan parsial karena cara ini Anda cenderung mengalami kesalahan dengan penguraian Javascript. Belum lagi itu membuat HTML jauh lebih mudah untuk ditulis.
sumber