Batasan perutean
ASP.NET Inti, Anda dapat meneruskan variabel pada URL dengan menentukan templat perutean, dan Anda dapat memberikan default, opsional, dan batasan untuk variabel.
Batasan digunakan dengan menambahkan nama batasan yang ditentukan ke rute atribut, yang digunakan sebagai berikut:
Beberapa kendala sudah disediakan di dalam kerangka kerja, sebagai berikut:
Kendala | contoh | Contoh kecocokan | Menggambarkan | int | {id:int} | 123456789, -123456789 | Cocokkan bilangan bulat apa pun | bool | {aktif:bool} | benar, SALAH | Mencocokkan benar atau salah (peka huruf besar/kecil) | tanggalwaktu | {dob:tanggalwaktu} | 2016-12-31, 2016-12-31 19:32 | Mencocokkan nilai DateTime yang valid (di lokalitas tetap - lihat peringatan) | desimal | {harga:desimal} | 49.99, -1,000.01 | Mencocokkan nilai desimal yang valid (di lokalitas tetap - lihat peringatan) | ganda | {berat: ganda} | 1.234, -1.001.01e8 | Mencocokkan nilai ganda yang valid (di lokalitas tetap - lihat peringatan) | mengapung | {berat: mengambang} | 1.234, -1.001.01e8 | Mencocokkan nilai float yang valid (di lokalitas tetap - lihat peringatan) | PANDUAN | {id:guid} | CD2C1638-1638-72D5-1638-DEADBEEF1638, {CD2C1638-1638-72D5-1638-DEADBEEF1638} | Cocok dengan nilai GUID yang valid | panjang | {centang:panjang} | 123456789, -123456789 | Cocok dengan nilai long yang valid | minlength(nilai) | {nama pengguna:minlength(4)} | Rick | String harus minimal 4 karakter | maxlength(nilai) | {nama file:maxlength(8)} | Richard | String tidak boleh melebihi 8 karakter | panjang (panjang) | {nama file:panjang(12)} | somefile.txt | String harus tepat 12 karakter | panjang (min, maks) | {nama file:panjang(8,16)} | somefile.txt | String harus setidaknya 8 karakter dan tidak lebih dari 16 karakter | min(nilai) | {usia:min(18)} | 19 | Nilai bilangan bulat harus minimal 18 | maks(nilai) | {usia:maks(120)} | 91 | Nilai bilangan bulat tidak boleh melebihi 120 | rentang (min, maks) | {usia:rentang (18,120)} | 91 | Nilai bilangan bulat harus minimal 18 dan tidak melebihi 120 | alfa | {nama:alfa} | Rick | String harus terdiri dari satu atau beberapa karakter alfabet (a-z, peka huruf besar/kecil). | regex(ekspresi) | {ssn:regex(^\d{{3}}-\d{{2}}-\d{{4}}$)} | 123-45-6789 | String harus cocok dengan ekspresi reguler (lihat tips untuk menentukan ekspresi reguler) | Diperlukan | {nama:wajib} | Rick | Digunakan untuk menerapkan keberadaan nilai non-parametrik selama pembuatan URL |
Batasan bawaan berfungsi untuk sebagian besar kasus penggunaan umum, tetapi terkadang kita masih perlu menyesuaikan efek yang kita inginkan.
Batasan perutean kustom
Batasan kustom adalah mengimplementasikan antarmuka IRouteConstraint dan kemudian membebani metode Match, yang memiliki empat parameter.
Parameter pertama, httpContext, adalah konteks permintaan saat ini
Parameter kedua, rute, adalah rute tempat batasan saat ini berada
Parameter ketiga, routeKey, adalah nama variabel yang saat ini diperiksa, seperti id dalam contoh di awal artikel Nilai parameter keempat adalah nilai kamus yang cocok dengan URL saat ini, seperti rute contoh di awal artikel, jika URL-nya adalah users/1, maka ada kamus dengan kunci = id , nilai = 1. Tentu saja, ada juga nilai untuk variabel lain, seperti pengontrol, tindakan, dll.
Parameter kelima, routeDirection, adalah nilai yang dihitung yang mewakili apakah URL diminta oleh web atau dihasilkan oleh metode seperti Url.Action.
Misalnya, kita ingin menentukan batasan yang menentukan bahwa parameter yang dilewatkan oleh rute harus berupa nilai pencacahan yang ditentukan.
Mari kita definisikan enum terlebih dahulu:
Kemudian tentukan batasan:
Tambahkan batasan kustom ke metode ConfigureServices di Startup.cs:
Menggunakan batasan pada rute:
(WebApplicationTest adalah namespace saat ini)
{id:int:min(2)} harus menggunakan min(2), jika tidak, akan ada konflik untuk id = 0 atau id = 1.
Jalankan program dan cocokkan batasan kustom kami saat rute adalah api/test/0, api/test/1, api/test/true, dan api/test/false.
Jika rute adalah api/test/{integer lebih besar dari 2}, cocokkan rute kedua.
Kasus lain cocok dengan rute ketiga.
kesimpulan
Batasan perutean adalah fitur yang sangat berguna dalam beberapa skenario, yang dapat mengurangi parameter pemeriksaan di pengontrol, dan fungsi validasi parameter parsial dapat diimplementasikan menggunakan attruibute deklaratif, dan beberapa pemeriksaan duplikat dapat diekstraksi menjadi batasan untuk penggunaan publik.
Konstruktor batasan dapat disuntikkan, sehingga dapat sangat diperluas, dan beberapa verifikasi parameter dapat dilakukan dengan mengkueri database.
Situs web resmi hanya secara singkat menyebutkan batasan perutean, dan artikel ini memberikan contoh spesifik tentang penggunaan batasan perutean.
|