Cara membuat kendala rute di ASP.NET Core

Batasan rute di ASP.NET Core digunakan untuk memfilter atau membatasi data yang tidak diinginkan mencapai tindakan pengontrol Anda. Untuk primer tentang perutean di ASP.NET Core, Anda dapat merujuk ke artikel saya sebelumnya tentang perutean berbasis atribut versus perutean berbasis konvensi di ASP.NET Core. Artikel ini membahas lebih dari dasar-dasar untuk mempelajari operasi lanjutan menggunakan batasan rute.

Untuk bekerja dengan contoh kode yang disediakan dalam artikel ini, Anda harus menginstal Visual Studio 2019 di sistem Anda. Jika Anda belum memiliki salinannya, Anda dapat mengunduh Visual Studio 2019 di sini. 

Buat proyek ASP.NET Core MVC di Visual Studio 2019

Pertama, mari buat proyek ASP.Net Core di Visual Studio 2019. Dengan asumsi Visual Studio 2019 diinstal di sistem Anda, ikuti langkah-langkah yang diuraikan di bawah ini untuk membuat proyek ASP.Net Core baru di Visual Studio.

  1. Luncurkan Visual Studio IDE.
  2. Klik "Buat proyek baru".
  3. Di jendela "Buat proyek baru", pilih "Aplikasi Web Inti ASP.NET" dari daftar templat yang ditampilkan.
  4. Klik Next.
  5. Di jendela "Configure your new project", tentukan nama dan lokasi untuk proyek baru tersebut.
  6. Secara opsional, centang kotak "Tempatkan solusi dan proyek dalam direktori yang sama", bergantung pada preferensi Anda.
  7. Klik Buat.
  8. Di jendela "Buat Aplikasi Web ASP.NET Core Baru" yang ditampilkan berikutnya, pilih .NET Core sebagai runtime dan ASP.NET Core 3.1 (atau yang lebih baru) dari daftar drop-down di bagian atas.
  9. Pilih "Aplikasi Web (Model-View-Controller)" sebagai template proyek untuk membuat aplikasi ASP.NET Core MVC baru. 
  10. Pastikan kotak centang "Aktifkan Dukungan Docker" dan "Konfigurasi untuk HTTPS" tidak dicentang karena kami tidak akan menggunakan fitur tersebut di sini.
  11. Pastikan Autentikasi disetel ke "Tanpa Autentikasi" karena kami juga tidak akan menggunakan autentikasi.
  12. Klik Buat.

Mengikuti langkah-langkah ini akan membuat proyek ASP.NET Core MVC baru di Visual Studio 2019. Kami akan menggunakan proyek ini di bagian di bawah ini untuk menggambarkan bagaimana kita dapat menggunakan batasan rute di ASP.NET Core 3.1.

Kelas RouteCollection di ASP.NET Core

Kelas RouteTable di ASP.NET Core berisi properti bernama Rute yang menyimpan semua rute sebagai RouteCollection. Kelas RouteCollection berisi beberapa metode ekstensi yang dapat digunakan untuk memetakan rute atau mengabaikannya.

MapRoute adalah metode kelebihan beban yang menerima batasan sebagai parameter. Anda dapat menggunakan ini untuk meneruskan kendala Anda ke rute. Berikut ini adalah deklarasi metode MapRoute.

Route MapRoute publik statis (rute RouteCollection ini, nama string,

    string url, default objek, batasan objek);

Antarmuka IRouteConstraint di ASP.NET Core

Antarmuka IRouteConstraint adalah kontrak yang berisi deklarasi hanya satu metode bernama Match. Antarmuka ini harus diperluas oleh kelas dan metode Kecocokan diterapkan di dalamnya untuk memeriksa apakah parameter URL tertentu valid untuk batasan. Berikut adalah bagaimana antarmuka IRouteConstraint didefinisikan:

namespace Microsoft.AspNetCore.Routing

{

    antarmuka publik IRouteConstraint

    {

        pertandingan bool (

            HttpContext httpContext,

            Rute luar,

            string routeKey,

            RouteValueDictionary nilai,

            RouteDirection routeDirection);

    }

}

Kamus ConstraintMap di ASP.NET Core

ConstraintMap adalah kamus yang berisi daftar batasan rute yang memetakan kunci batasan rute ke implementasi IRouteConstraint. Potongan kode yang diberikan di bawah ini menggambarkan bagaimana Anda dapat menambahkan batasan khusus Anda ke kamus ini.

public void ConfigureServices (layanan IServiceCollection) 

{  

  services.Configure (routeOptions =>  

  { 

     routeOptions.ConstraintMap.Add ("emailconstraint", typeof (EmailRouteContraint)); 

  }); 

Menerapkan metode Pertandingan IRouteConstraint di ASP.NET Core

Untuk membuat batasan rute kustom, Anda harus membuat kelas yang memperluas antarmuka IRouteConstraint dan mengimplementasikan metode Match-nya. Batasan dapat digunakan untuk menggagalkan permintaan masuk yang tidak diinginkan dan mencegah rute dicocokkan kecuali kondisi tertentu terpenuhi. Misalnya, Anda mungkin ingin memastikan bahwa parameter yang diteruskan ke metode tindakan selalu berupa bilangan bulat.

Metode Pencocokan menerima parameter berikut:

  • HttpContext - merangkum semua informasi spesifik HTTP tentang sebuah permintaan
  • IRouter - mewakili router yang akan menerapkan batasan
  • RouteKey - mewakili parameter rute yang sedang divalidasi
  • RouteDirection - enum yang berisi dua nilai, yaitu IncomingRequest dan UrlGeneration, dan digunakan untuk menunjukkan apakah URL sedang diproses dari permintaan HTTP atau menghasilkan URL
  • RouteValues ​​- berisi parameter URL

Struktur kendala rute kustom di ASP.NET Core

Berikut adalah contoh struktur batasan rute kustom:

kelas publik CustomRouteConstraint: IRouteConstraint

    {

        public bool Match (HttpContext httpContext, IRouter route,

        string routeKey, nilai RouteValueDictionary,

        RouteDirection routeDirection)

        {

            melempar NotImplementedException () baru;

        }

    }

Contoh kendala rute kustom di ASP.NET Core

Sekarang mari kita menerapkan batasan rute kustom yang dapat memeriksa ID email. Pertama, buat kelas yang memperluas antarmuka IRouteConstraint dan menerapkan metode Cocokkan. Cuplikan kode berikut menunjukkan kelas kendala rute khusus bernama EmailRouteContraint yang memperluas antarmuka IRouteConstraint.

kelas publik EmailRouteContraint: IRouteConstraint

    {

        public bool Match (HttpContext httpContext, IRouter route,

        string routeKey, nilai RouteValueDictionary,

        RouteDirection routeDirection)

        {

            kembali benar;

        }

    }

Daftar kode berikut menunjukkan kelas EmailRouteConstraint dengan metode Pencocokan yang diterapkan.

kelas publik EmailRouteContraint: IRouteConstraint

    {

        public bool Match (HttpContext httpContext, IRouter route,

        string routeKey, nilai RouteValueDictionary,

        RouteDirection routeDirection)

        {

            if (values.TryGetValue (routeKey, keluar var routeValue))

            {

                var parameterValueString = Convert.ToString (routeValue,

                CultureInfo.InvariantCulture);

                return IsEmailAddressValid (parameterValueString);

            }

            return false;

        }

        private bool IsEmailAddressValid (string emailAddress)

        {

            kembali benar;

        }

    }

Perhatikan bahwa metode IsEmailAddressValid di sini hanya mengembalikan "true". Saya menyerahkan kepada Anda untuk menulis kode yang diperlukan untuk memvalidasi alamat email.

Daftarkan batasan rute kustom di ASP.NET Core

Anda harus mendaftarkan batasan rute kustom Anda dengan sistem perutean di metode ConfigureServices pada kelas Startup. Cuplikan kode berikut menggambarkan hal ini. 

public void ConfigureServices (layanan IServiceCollection)

      {

          services.AddControllersWithViews ();

          services.Configure (routeOptions =>

          {

              routeOptions.ConstraintMap.Add ("ERC",

              typeof (EmailRouteContraint));

          });

      }

Anda juga harus mengonfigurasi batasan rute kustom Anda dalam metode Konfigurasi kelas Startup seperti yang ditunjukkan pada cuplikan kode di bawah ini.

app.UseEndpoints (titik akhir =>

{

     endpoints.MapControllerRoute (

         nama: "default",

         batasan: baru {ERC = new EmailRouteContraint ()},

         pola: "{controller = Home} / {action = Index} / {id?}");

});

Dan itu dia. Sekarang Anda dapat menentukan batasan dalam pengontrol atau metode tindakan Anda dan mulai menggunakan aplikasi.

Runtime ASP.NET Core memvalidasi jika pola yang ditentukan dan batasan rute cocok dengan pola dan nilai permintaan masuk. Logika validasi batasan ditentukan di dalam metode Cocokkan batasan rute khusus Anda. Anda dapat memanfaatkan batasan untuk menghindari permintaan yang tidak perlu serta untuk memvalidasi nilai rute sebelum permintaan diteruskan ke metode tindakan.

Cara melakukan lebih banyak di ASP.NET Core:

  • Cara mengelola rahasia pengguna di ASP.NET Core
  • Cara membangun aplikasi gRPC di ASP.NET Core
  • Cara mengarahkan permintaan di ASP.NET Core
  • Cara menggunakan perutean atribut di ASP.NET Core
  • Cara meneruskan parameter ke metode tindakan di ASP.NET Core MVC
  • Cara menggunakan Penganalisis API di ASP.NET Core
  • Cara menggunakan token data rute di ASP.NET Core
  • Cara menggunakan versi API di ASP.NET Core
  • Cara menggunakan Objek Transfer Data di ASP.NET Core 3.1
  • Cara menangani kesalahan 404 di ASP.NET Core MVC
  • Cara menggunakan injeksi ketergantungan dalam tindakan filter di ASP.NET Core 3.1
  • Cara menggunakan pola opsi di ASP.NET Core
  • Cara menggunakan perutean titik akhir di ASP.NET Core 3.0 MVC
  • Cara mengekspor data ke Excel di ASP.NET Core 3.0
  • Cara menggunakan LoggerMessage di ASP.NET Core 3.0
  • Cara mengirim email di ASP.NET Core
  • Cara memasukkan data ke SQL Server di ASP.NET Core
  • Cara menjadwalkan pekerjaan menggunakan Quartz.NET di ASP.NET Core
  • Cara mengembalikan data dari ASP.NET Core Web API
  • Cara memformat data respons di ASP.NET Core
  • Cara menggunakan ASP.NET Core Web API menggunakan RestSharp
  • Cara melakukan operasi asinkron menggunakan Dapper
  • Cara menggunakan tanda fitur di ASP.NET Core
  • Cara menggunakan atribut FromServices di ASP.NET Core
  • Cara bekerja dengan cookie di ASP.NET Core
  • Cara bekerja dengan file statis di ASP.NET Core
  • Cara menggunakan URL Rewriting Middleware di ASP.NET Core
  • Cara menerapkan pembatasan laju di ASP.NET Core
  • Cara menggunakan Azure Application Insights di ASP.NET Core
  • Menggunakan fitur NLog lanjutan di ASP.NET Core
  • Bagaimana menangani kesalahan di ASP.NET Web API
  • Bagaimana menerapkan penanganan pengecualian global di ASP.NET Core MVC
  • Bagaimana menangani nilai null di ASP.NET Core MVC
  • Versi lanjutan dalam ASP.NET Core Web API
  • Cara bekerja dengan layanan pekerja di ASP.NET Core
  • Cara menggunakan API Perlindungan Data di ASP.NET Core
  • Cara menggunakan middleware bersyarat di ASP.NET Core
  • Cara bekerja dengan status sesi di ASP.NET Core
  • Cara menulis pengontrol yang efisien di ASP.NET Core