Cara menggunakan perutean atribut di ASP.NET Core

Middleware perutean di ASP.NET Core mahir memetakan permintaan masuk ke penangan rute masing-masing. Anda dapat mengatur perutean di ASP.NET Core dengan dua cara berbeda: perutean berbasis atribut dan perutean berbasis konvensi.

Tidak seperti perutean berbasis konvensi, di mana informasi perutean ditentukan di satu lokasi, perutean atribut memungkinkan Anda mengimplementasikan perutean dengan menghias metode tindakan Anda dengan atribut. Artikel ini menyajikan diskusi tentang bagaimana kita dapat bekerja dengan perutean berbasis atribut di ASP.NET Core MVC.

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 3.1 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 bekerja dengan atribut perutean di ASP.NET Core 3.1.

Buat kelas pengontrol di ASP.NET Core MVC

Buat pengontrol baru bernama DefaultController dan ganti kode sumber default DefaultController dengan kode berikut:

    kelas publik DefaultController: Controller

    {

        [Rute("")]

        [Rute ("Default")]

        [Rute ("Default / Indeks")]

        publik ActionResult Index ()

        {

            kembalikan baru EmptyResult ();

        }

        [Rute ("Default / GetRecordsById / {id}")]

        publik ActionResult GetRecordsById (int id)

        {

            string str = string.Format

            ("Id yang dikirimkan sebagai parameter adalah: {0}", id);

            kembali Ok (str);

        }

    }

Gunakan perutean atribut di tingkat pengontrol di ASP.NET Core

Perutean atribut dapat digunakan pada tingkat pengontrol dan metode tindakan. Jika kita menerapkan atribut rute pada tingkat pengontrol, maka rute tersebut berlaku untuk semua metode tindakan pengontrol itu.

Jika Anda memeriksa kelas DefaultController kami, Anda akan mengamati bahwa rute Default digunakan beberapa kali saat menentukan template rute untuk metode tindakan. Cuplikan kode berikut menunjukkan bagaimana Anda dapat menentukan atribut rute yang berbeda pada tingkat pengontrol untuk membuat penggunaan perutean atribut lebih fleksibel.

[Rute ("Default")]   

kelas publik DefaultController: Controller

{

  [Rute("")]

  [Rute ("Indeks")]

  publik ActionResult Index ()

  {

      kembalikan baru EmptyResult ();

   }

  [HttpGet]

  Rute ("Default / GetRecordsById / {id}")]

  publik ActionResult GetRecordsById (int id)

  {

      string str = string.Format ("Id yang dikirimkan sebagai parameter adalah: {0}", id);

      kembali Ok (str);

   }

}

Saat menggunakan atribut rute baik di tingkat pengontrol maupun metode tindakan, templat rute yang diterapkan di tingkat pengontrol ditambahkan ke templat rute yang ditentukan di tingkat metode tindakan.

Anda mungkin sering membutuhkan awalan umum untuk pengontrol Anda. Ketika Anda melakukannya, Anda harus menggunakan atribut [RoutePrefix] seperti yang ditunjukkan dalam potongan kode yang diberikan di bawah ini.

[RoutePrefix ("layanan")]

kelas publik HomeController: Controller

{

   // Metode tindakan

}

Gunakan perutean atribut pada tingkat metode tindakan di ASP.NET Core

Lihat kelas DefaultController yang ditunjukkan di atas. Seperti yang Anda lihat, kami telah menetapkan tiga rute dalam metode Indeks kelas DefaultController. Ini menyiratkan bahwa setiap URL berikut akan memanggil metode aksi Index () dari DefaultController.

// localhost: 11277

// localhost: 11277 / home

// localhost: 11277 / home / index

Seperti dalam perutean berbasis konvensi, Anda juga dapat menentukan parameter dalam perutean berbasis atribut. Dengan kata lain, perutean berbasis atribut memungkinkan Anda menentukan atribut rute dengan parameter. Metode tindakan GetRecordsById dari kelas DefaultController yang ditunjukkan sebelumnya adalah contohnya.

Perhatikan bahwa "{id}" di rute yang ditentukan mewakili parameter atau placeholder. Parameter id dalam contoh ini bisa apa saja, seperti string atau integer. Bagaimana jika Anda ingin membatasi parameter hanya menjadi bilangan bulat? Anda dapat mencapai ini dengan menggunakan batasan.

Gunakan batasan rute atribut dalam metode tindakan

Batasan rute digunakan untuk menggagalkan permintaan yang tidak valid ke tindakan pengontrol. Misalnya, Anda mungkin ingin memastikan bahwa parameter yang diteruskan ke metode tindakan selalu berupa bilangan bulat. Sintaks penggunaan batasan rute adalah {parameter: batasan}. Cuplikan kode berikut menggambarkan hal ini. Perhatikan bahwa parameter id di sini selalu berupa bilangan bulat.

[Rute ("Default / GetRecordsById / {id: int}")]

publik ActionResult GetRecordsById (int id)

{

  string str = string.Format ("Id yang dikirimkan sebagai parameter adalah: {0}", id);

  kembali Ok (str);

}

Gunakan parameter opsional dalam spesifikasi rute atribut

Anda juga dapat menggunakan parameter opsional dalam spesifikasi rute Anda. Potongan kode berikut menunjukkan bagaimana ini dapat dicapai. Perhatikan bahwa metode tindakan dalam kasus ini akan dijalankan meskipun parameter id tidak diteruskan.

[Rute ("Sales / GetSalesByRegionId / {id?}")]

Penting untuk dipahami bahwa ketika menggunakan perutean atribut, baik nama pengontrol maupun nama metode tindakan tidak berperan dalam memilih metode tindakan mana yang akan dijalankan. Mari kita lihat ini dengan sebuah contoh. Cuplikan kode berikut menggambarkan bagaimana URL telah diubah dalam spesifikasi rute untuk metode tindakan GetRecordsById.

[Rute ("Home / GetRecordsById / {id: int}")]

publik ActionResult GetRecordsById (int id)

{

   string str = string.Format ("Id yang dikirimkan sebagai parameter adalah: {0}", id);

   kembali Ok (str);

}

Sekarang Anda dapat menjalankan metode tindakan GetRecordsById menggunakan URL berikut:

// localhost: 11277 / home / GetRecordsById / 1

Gunakan beberapa batasan rute atribut dalam metode tindakan

Dimungkinkan juga untuk menerapkan beberapa batasan ke parameter. Potongan kode berikut menggambarkan bagaimana hal ini dapat dicapai. Perhatikan nilai minimum parameter id harus 1, jika tidak kesalahan 404 akan dikembalikan.

[Rute ("Default / GetRecordsById / {id: int: min (1)}")]

publik ActionResult GetRecordsById (int id)

{

    string str = string.Format ("Id yang dikirimkan sebagai parameter adalah: {0}", id);

    kembali Ok (str);

}

Gunakan kata kerja HTTP dalam perutean atribut dalam metode tindakan

Anda bahkan dapat menggunakan kata kerja HTTP dalam perutean atribut. Potongan kode berikut menunjukkan bagaimana ini dapat dicapai.

[HttpGet]

[Rute ("Default / GetRecordsById / {id: int: min (1)}")]

publik ActionResult GetRecordsById (int id)

{

  string str = string.Format ("Id yang dikirimkan sebagai parameter adalah: {0}", id);

  kembali Ok (str);

}

Batasan rute atribut yang umum digunakan 

Berikut adalah daftar batasan rute yang paling umum digunakan di ASP.NET Core. 

  • bool - digunakan untuk mencocokkan nilai Boolean
  • datetime - digunakan untuk mencocokkan nilai DateTime
  • desimal - digunakan untuk mencocokkan nilai desimal
  • double - digunakan untuk mencocokkan nilai floating-point 64-bit
  • float - digunakan untuk mencocokkan nilai floating-point 32-bit
  • guid - digunakan untuk mencocokkan nilai GUID
  • int - digunakan untuk mencocokkan nilai integer 32-bit
  • long - digunakan untuk mencocokkan nilai integer 64-bit
  • max - digunakan untuk mencocokkan integer dengan nilai maksimum
  • min - digunakan untuk mencocokkan bilangan bulat dengan nilai minimum
  • minlength - digunakan untuk mencocokkan string dengan panjang minimum
  • ekspresi reguler - digunakan untuk mencocokkan ekspresi reguler

Buat batasan rute atribut khusus 

Anda juga dapat membuat batasan rute kustom Anda sendiri dengan membuat kelas yang memperluas antarmuka IRouteConstraint dan menerapkan metode Cocok seperti yang ditunjukkan dalam cuplikan kode yang diberikan di bawah ini.

kelas publik CustomRouteConstraint: IRouteConstraint

    {

        public bool Match (HttpContext httpContext, IRouter route,

        string routeKey,

        Nilai RouteValueDictionary, RouteDirection routeDirection)

        {

            melempar NotImplementedException () baru;

        }

    }

Gunakan penggantian token dalam rute atribut di tingkat pengontrol

Perutean atribut di ASP.NET Core MVC menyediakan dukungan untuk fitur menarik lainnya bernama penggantian token. Anda dapat menggunakan token [tindakan], [area], dan [pengontrol] di pengontrol Anda, dan token ini akan diganti masing-masing dengan nama tindakan, area, dan pengontrol. Potongan kode berikut menggambarkan bagaimana hal ini dapat dicapai.

[Rute ("[pengontrol] / [tindakan]")]

kelas publik HomeController: Controller

{

   pribadi hanya baca ILogger _logger;

   public HomeController (ILogger logger)

   {

       _logger = logger;

   }

   Indeks IActionResult publik ()

   {

       kembali View ();

   }

   // Metode tindakan lainnya

}

Perutean atribut di ASP.NET Core memberi Anda lebih banyak kontrol dan fleksibilitas atas URI di aplikasi web Anda. Meskipun perutean berbasis konvensi dapat dikonfigurasi di satu lokasi, yang pada gilirannya dapat diterapkan ke semua pengontrol dalam aplikasi Anda, sulit untuk mendukung pola URI tertentu (seperti pembuatan versi API) dengan perutean berbasis konvensi.

Dengan menggunakan perutean atribut, Anda dapat memisahkan nama pengontrol dan tindakan dari template rute. Anda bahkan dapat menggunakan kombinasi perutean berbasis konvensi dan perutean berbasis atribut dalam aplikasi ASP.NET Core Anda.

Cara melakukan lebih banyak 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