ASP.NET Perutean API Web, sederhananya, adalah proses memetakan permintaan klien ke Tindakan yang sesuai. Dalam artikel "ASP.NET Web API Practice Series 03, Routing Templates, Routing Conventions, Routing Settings", saya mengalami pengaturan rute melalui template, konvensi, dan metode HTTP, dan keuntungan dari pendekatan ini adalah bahwa template routing ditempatkan secara seragam di kelas WebApiConfig di bawah folder App_Start, yang nyaman untuk manajemen, tetapi kerugiannya adalah tidak cukup fleksibel.
REST memperlakukan semuanya sebagai sumber daya, dan terkadang, sumber daya dengan sumber daya turunan, seperti Pelanggan dan Pesanan, mungkin ingin memasukkan permintaan seperti pelanggan/1/pesanan, tetapi sulit untuk mencapai rute ini hanya dengan konvensi. Faktanya, ASP.NET Web API memberi kita fitur Rute, yang dapat langsung dihubungkan ke Action, yang sangat fleksibel dan intuitif untuk digunakan.
Mari kita rasakan cara menggunakan fitur Rute di ASP.NET MVC4.
Izinkan atribut Rute
Pertama, Anda perlu mengaturnya di WebApiConfig.
Metode MapHttpAttributeRoutes di atas hanya tersedia di ASP.NET versi Web API yang lebih baruJika versi Anda relatif rendah, Anda dapat menghapus versi lama dan menginstal versi terbaru melalui konsol NuGet Package Manager.
Selanjutnya, di Global.asax, Anda perlu mengomentari cara asli mendaftarkan WebApiConfig dan mengadopsi metode baru, sebagai berikut:
Saat ini, menjalankan proyek dapat melaporkan kesalahan berikut:
Ini karena saat mengunduh ASP.NET Web API versi terbaru, saya juga mengunduh icrosoft versi terbaru. AspNet.WebApi.HelpPage。 Anda dapat menghapus HelpPage versi terbaru dan mengunduh versi yang lebih lama.
Uninstall-Package Microsoft.AspNet.WebApi.HelpPage –Force Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
Menggunakan properti Rute
Buat kelas Cusomter.
Buat kelas Urutan.
Buat kelas Database untuk mendapatkan koleksi Order.
Buat pengontrol API kosong yang ditulis seperti ini:
Ketik yang berikut ini di browser Anda:
Jika Anda menggunakan ASP.NET MVC4 untuk pengembangan, Anda mungkin mendapatkan kesalahan berikut saat program dijalankan untuk pertama kalinya:
[SEBUAH] System.Web.WebPages.Razor.Configuration.HostSection tidak dapat ditransmisikan ke [B]System.Web.WebPages.Razor.Configuration.HostSection. Tipe A berasal dari "System.Web.WebPages.Razor, version=2.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (dalam "C:/Windows/Microsoft.Net/assembly/GAC_MSIL/ dalam konteks "Default") System.Web.WebPages.Razor/v4.0_2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll"). Tipe B berasal dari "System.Web.WebPages.Razor, version=3.0.0.0, culture=neutral, PublicKeyToken=31bf3856ad364e35" (dalam konteks "Default" dalam "C:/Windows/Microsoft.NET/Framework/v4.0.30319/ File ASP.NET Sementara/vs/feb7ce97/a525d58a/asse
Ini karena Razor versi terbaru digunakan saat mengunduh versi terbaru dari ASP.NET Web API. Anda perlu mengonfigurasi konfigurasi berikut di direktori root Web.config:
Gunakan fitur RoutePrefix
Jika Anda ingin mengawali semua Tindakan di pengontrol API, Anda dapat menempatkan fitur RoutePrefix pada pengontrol API.
Misalnya, kita ingin dalam format seperti ini: http://localhost/api/customers/1/orders
Ubah OrdersController dengan cara ini.
Anda juga dapat menggunakan ~ di fitur Rute untuk mengganti aturan awalan Tindakan.
Awalan yang ditentukan oleh fitur RoutePrefix juga dapat memiliki variabel parameter:
Batasan perutean
Anda dapat membatasi variabel parameter dalam rute dengan "{nama variabel parameter: batas}".
Di atas, jika id variabel fragmen berjenis int, itu dirutekan ke Tindakan pertama, dan jika tidak, itu dirutekan ke Tindakan kedua.
ASP.NET batasan bawaan API Web meliputi:
{x:alpha} membatasi huruf besar dan huruf kecil {x:bool} {x:tanggalwaktu} {x:desimal} {x:ganda} {x:mengambang} {x:guid} {x:int} {x:panjang(6)} {x:length(1,20)} membatasi rentang panjang {x:panjang} {x:maxlength(10)} {x:min(10)} {x:rentang(10,50)} {x:regex(regex)}
Anda dapat mengatur beberapa batasan untuk variabel parameter secara bersamaan:
Terapkan antarmuka IHttpRouteConstraint untuk menyesuaikan aturan batasan. Terapkan batasan yang tidak boleh 0.
Daftarkan batasan kustom di WebApiConfig di folder App_Start.
Gunakan batasan kustom.
Parameter opsional dan nilai defaultnya
Jika variabel parameter perutean bersifat opsional, parameter juga harus diberi nilai default.
Tambahkan ? setelah batasan untuk menunjukkan opsional, dan atur nilai default untuk id dalam parameter metode.
Menetapkan nama untuk rute
Prioritas perutean
Prioritas rute yang ditetapkan oleh properti Rute ditentukan berdasarkan konvensi dan properti RouteOrder.
Konvensinya adalah:
1. Variabel fragmen statis 2. Variabel fragmen dengan batasan 3. Variabel fragmen tanpa batasan 4. Variabel fragmen wildcard dengan batasan 5. Variabel fragmen wildcard yang tidak dibatasi
Nilai default properti RouteOrder adalah 0, dan semakin kecil nilai properti, semakin tinggi.
Di atas, urutan prioritas untuk perutean adalah:
order/detail variabel fragmen statis, nilai properti RouteOrder adalah 0 order/{id} dengan variabel fragmen terbatas dengan nilai 0 di properti RouteOrder orders/{customerName} adalah variabel fragmen tanpa batasan, dan nilai properti RouteOrder adalah 0 orders/{*date} adalah variabel fragmen wildcard dengan nilai 0 di properti RouteOrder order/nilai properti RouteOrder tertunda 1
|