Cara menggunakan atribut routing dalam ASP.NET Core

Perisian tengah penghalaan di ASP.NET Core mahir memetakan permintaan masuk ke pengendali laluan masing-masing. Anda boleh mengatur perutean dalam ASP.NET Core dengan dua cara yang berbeza: perutean berdasarkan atribut dan perutean berdasarkan konvensyen.

Tidak seperti perutean berdasarkan konvensyen, di mana maklumat perutean ditentukan di satu lokasi, perutean atribut memungkinkan Anda menerapkan perutean dengan menghias metode tindakan Anda dengan atribut. Artikel ini membentangkan perbincangan tentang bagaimana kita dapat bekerja dengan penghalaan berdasarkan atribut di ASP.NET Core MVC.

Untuk bekerja dengan contoh kod yang disediakan dalam artikel ini, anda harus memasang Visual Studio 2019 di sistem anda. Sekiranya anda belum mempunyai salinannya, anda boleh memuat turun Visual Studio 2019 di sini. 

Buat projek ASP.NET Core 3.1 MVC di Visual Studio 2019

Pertama, mari buat projek Teras ASP.NET di Visual Studio 2019. Dengan andaian Visual Studio 2019 dipasang di sistem anda, ikuti langkah-langkah yang digariskan di bawah untuk membuat projek Teras ASP.NET baru di Visual Studio.

  1. Lancarkan ID Studio Visual.
  2. Klik pada "Buat projek baru."
  3. Di tetingkap "Buat projek baru", pilih "Aplikasi Web Inti ASP.NET" dari senarai templat yang dipaparkan.
  4. Klik Seterusnya.
  5. Di tetingkap "Konfigurasikan projek baru Anda", tentukan nama dan lokasi untuk projek baru.
  6. Secara pilihan, centang kotak "Tempatkan penyelesaian dan projek di direktori yang sama", bergantung pada pilihan anda.
  7. Klik Buat.
  8. Di tetingkap "Buat Aplikasi Web Teras ASP.NET Teras" yang ditunjukkan di sebelahnya, pilih .NET Core sebagai jangka masa dan ASP.NET Core 3.1 (atau lebih baru) dari senarai juntai bawah di bahagian atas.
  9. Pilih "Aplikasi Web (Model-View-Controller)" sebagai templat projek untuk membuat aplikasi ASP.NET Core MVC baru. 
  10. Pastikan bahawa kotak centang "Aktifkan Docker Support" dan "Configure for HTTPS" tidak dicentang kerana kami tidak akan menggunakan fitur tersebut di sini.
  11. Pastikan Pengesahan disetel ke "Tanpa Pengesahan" kerana kami juga tidak akan menggunakan pengesahan.
  12. Klik Buat.

Mengikuti langkah-langkah ini akan membuat projek ASP.NET Core MVC baru di Visual Studio 2019. Kami akan menggunakan projek ini di bahagian di bawah untuk menggambarkan bagaimana kita dapat bekerja dengan atribut routing di ASP.NET Core 3.1.

Buat kelas pengawal di ASP.NET Core MVC

Buat pengawal baru bernama DefaultController dan ganti kod sumber lalai dari DefaultController dengan kod berikut:

    kelas awam DefaultController: Controller

    {

        [Laluan ("")]

        [Laluan ("Lalai")]

        [Laluan ("Lalai / Indeks")]

        Indeks ActionResult awam ()

        {

            mengembalikan EmptyResult baru ();

        }

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

        public ActionResult GetRecordsById (int id)

        {

            string str = string.Format

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

            kembali Ok (str);

        }

    }

Gunakan penghalaan atribut pada peringkat pengawal di ASP.NET Core

Penghalaan atribut dapat digunakan baik pada tingkat pengawal maupun metode tindakan Sekiranya kita menerapkan atribut laluan pada tingkat pengawal, maka rute tersebut dapat digunakan untuk semua kaedah tindakan pengawal tersebut.

Sekiranya anda memeriksa kelas DefaultController kami, anda akan melihat bahawa laluan Default digunakan berkali-kali ketika menentukan templat laluan untuk kaedah tindakan. Coretan kod berikut menunjukkan bagaimana anda dapat menentukan atribut laluan yang berbeza di peringkat pengawal untuk menggunakan perutean atribut yang lebih fleksibel.

[Laluan ("Lalai")]   

kelas awam DefaultController: Controller

{

  [Laluan ("")]

  [Laluan ("Indeks")]

  Indeks ActionResult awam ()

  {

      mengembalikan EmptyResult baru ();

   }

  [HttpGet]

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

  public ActionResult GetRecordsById (int id)

  {

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

      kembali Ok (str);

   }

}

Semasa menggunakan atribut laluan baik pada tahap pengawal dan metode tindakan, templat rute yang diterapkan pada tingkat pengawal disiapkan ke templat rute yang ditentukan pada tingkat metode tindakan.

Anda mungkin memerlukan awalan umum untuk pengawal anda. Apabila anda melakukannya, anda harus menggunakan atribut [RoutePrefix] seperti yang ditunjukkan dalam coretan kod yang diberikan di bawah.

[RoutePrefix ("perkhidmatan")]

kelas awam HomeController: Controller

{

   // Kaedah tindakan

}

Gunakan penghalaan atribut pada tahap kaedah tindakan di ASP.NET Core

Rujuk kelas DefaultController yang ditunjukkan di atas. Seperti yang anda lihat, kami telah menentukan tiga laluan dalam kaedah Indeks kelas DefaultController. Ini menunjukkan bahawa setiap URL berikut akan menggunakan kaedah tindakan Index () dari DefaultController.

// localhost: 11277

// localhost: 11277 / rumah

// localhost: 11277 / rumah / indeks

Seperti dalam perutean berdasarkan konvensi, Anda juga dapat menentukan parameter dalam perutean berdasarkan atribut. Dengan kata lain, perutean berdasarkan atribut membolehkan anda menentukan atribut laluan dengan parameter. Kaedah tindakan GetRecordsById dari kelas DefaultController yang ditunjukkan sebelumnya adalah contoh.

Perhatikan bahawa "{id}" di rute yang ditentukan mewakili parameter atau pemegang tempat. Parameter id dalam contoh ini boleh menjadi apa-apa, seperti rentetan atau bilangan bulat. Bagaimana jika anda ingin mengehadkan parameter kepada bilangan bulat sahaja? Anda boleh mencapainya dengan menggunakan kekangan.

Gunakan kekangan laluan atribut dalam kaedah tindakan

Kekangan laluan digunakan untuk menggagalkan permintaan yang tidak sah kepada tindakan pengawal. Sebagai contoh, anda mungkin ingin memastikan bahawa parameter yang diteruskan ke kaedah tindakan selalu berupa bilangan bulat. Sintaks menggunakan batasan laluan adalah {parameter: constraint}. Coretan kod berikut menggambarkan perkara ini. Perhatikan bahawa parameter id di sini selalu menjadi bilangan bulat.

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

public ActionResult GetRecordsById (int id)

{

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

  kembali Ok (str);

}

Gunakan parameter pilihan dalam spesifikasi laluan atribut

Anda juga boleh menggunakan parameter pilihan dalam spesifikasi laluan anda. Coretan kod berikut menunjukkan bagaimana ini dapat dicapai. Perhatikan bahawa kaedah tindakan dalam kes ini akan dijalankan walaupun parameter id tidak lulus.

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

Penting untuk memahami bahawa ketika menggunakan atribut routing baik nama pengawal maupun nama metode tindakan memainkan peranan dalam memilih metode tindakan mana yang akan dijalankan. Mari kita lihat ini dengan contoh. Coretan kod berikut menggambarkan bagaimana URL telah diubah dalam spesifikasi laluan untuk kaedah tindakan GetRecordsById.

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

public ActionResult GetRecordsById (int id)

{

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

   kembali Ok (str);

}

Anda kini boleh menggunakan kaedah tindakan GetRecordsById menggunakan URL berikut:

// localhost: 11277 / rumah / GetRecordsById / 1

Gunakan beberapa had laluan atribut dalam kaedah tindakan

Juga dimungkinkan untuk menerapkan beberapa batasan pada parameter. Coretan kod berikut menggambarkan bagaimana ini dapat dicapai. Perhatikan nilai minimum parameter id harus 1, jika tidak, ralat 404 akan dikembalikan.

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

public ActionResult GetRecordsById (int id)

{

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

    kembali Ok (str);

}

Gunakan kata kerja HTTP di laluan atribut dalam kaedah tindakan

Anda bahkan boleh menggunakan kata kerja HTTP dalam penghalaan atribut. Coretan kod berikut menunjukkan bagaimana ini dapat dicapai.

[HttpGet]

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

public ActionResult GetRecordsById (int id)

{

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

  kembali Ok (str);

}

Kekangan laluan atribut yang biasa digunakan 

Berikut adalah senarai kekangan laluan yang paling biasa digunakan dalam ASP.NET Core. 

  • bool - digunakan untuk memadankan nilai Boolean
  • datetime - digunakan untuk memadankan nilai DateTime
  • perpuluhan - digunakan untuk memadankan nilai perpuluhan
  • berganda - digunakan untuk memadankan nilai titik terapung 64-bit
  • apungan - digunakan untuk memadankan nilai titik terapung 32-bit
  • panduan - digunakan untuk memadankan nilai GUID
  • int - digunakan untuk memadankan nilai integer 32-bit
  • panjang - digunakan untuk memadankan nilai integer 64-bit
  • maks - digunakan untuk memadankan bilangan bulat dengan nilai maksimum
  • min - digunakan untuk memadankan bilangan bulat dengan nilai minimum
  • minlength - digunakan untuk memadankan rentetan dengan panjang minimum
  • regex - digunakan untuk memadankan ungkapan biasa

Buat kekangan laluan atribut tersuai 

Anda juga dapat membuat kekangan laluan tersuai anda sendiri dengan membuat kelas yang memperluas antara muka IRouteConstraint dan menerapkan kaedah Match seperti yang ditunjukkan dalam potongan kode yang diberikan di bawah.

kelas awam CustomRouteConstraint: IRouteConstraint

    {

        Public bool Match (HttpContext httpContext, laluan IRouter,

        laluan rentetan Key,

        Nilai RouteValueDictionary, RouteDirection routeDirection)

        {

            membuang NotImplementedException baru ();

        }

    }

Gunakan penggantian token di laluan atribut di peringkat pengawal

Perutean atribut dalam ASP.NET Core MVC memberikan sokongan untuk satu lagi ciri menarik bernama penggantian token. Anda boleh menggunakan token [tindakan], [kawasan], dan [pengawal] di pengawal anda, dan token ini akan diganti dengan nama tindakan, kawasan, dan pengawal masing-masing. Coretan kod berikut menggambarkan bagaimana ini dapat dicapai.

[Laluan ("[pengawal] / [tindakan]")]

kelas awam HomeController: Controller

{

   ILogger _logger peribadi baca;

   Pengawal Awam awam (logger ILogger)

   {

       _logger = pembalak;

   }

   Indeks IActionResult awam ()

   {

       kembali Paparan ();

   }

   // Kaedah tindakan lain

}

Perutean atribut dalam ASP.NET Core memberi anda lebih banyak kawalan dan fleksibiliti terhadap URI dalam aplikasi web anda. Walaupun perutean berdasarkan konvensi dapat dikonfigurasi di satu lokasi, yang pada gilirannya dapat diterapkan ke semua pengontrol dalam aplikasi Anda, sulit untuk mendukung pola URI tertentu (seperti versi API) dengan perutean berdasarkan konvensi.

Dengan menggunakan atribut routing, anda dapat mencabut nama pengawal dan nama tindakan dari templat laluan. Anda bahkan boleh menggunakan kombinasi routing berdasarkan konvensi dan routing berdasarkan atribut dalam aplikasi Core ASP.NET anda.

Cara melakukan lebih banyak perkara dalam ASP.NET Core:

  • Cara menyampaikan parameter ke kaedah tindakan di ASP.NET Core MVC
  • Cara menggunakan Penganalisis API dalam ASP.NET Core
  • Cara menggunakan token data laluan di ASP.NET Core
  • Cara menggunakan versi API di ASP.NET Core
  • Cara menggunakan Objek Pemindahan Data dalam ASP.NET Core 3.1
  • Cara mengatasi ralat 404 dalam ASP.NET Core MVC
  • Cara menggunakan suntikan kebergantungan dalam penapis tindakan dalam ASP.NET Core 3.1
  • Cara menggunakan corak pilihan dalam ASP.NET Core
  • Cara menggunakan penghalaan titik akhir dalam ASP.NET Core 3.0 MVC
  • Cara mengeksport data ke Excel dalam ASP.NET Core 3.0
  • Cara menggunakan LoggerMessage dalam ASP.NET Core 3.0
  • Cara menghantar e-mel dalam ASP.NET Core
  • Cara log data ke SQL Server di ASP.NET Core
  • Cara menjadualkan pekerjaan menggunakan Quartz.NET di ASP.NET Core
  • Cara mengembalikan data dari ASP.NET Core Web API
  • Cara memformat data tindak balas dalam ASP.NET Core
  • Cara menggunakan API Web Teras ASP.NET menggunakan RestSharp
  • Cara melakukan operasi async menggunakan Dapper
  • Cara menggunakan bendera ciri dalam ASP.NET Core
  • Cara menggunakan atribut FromServices di ASP.NET Core
  • Cara bekerja dengan kuki di ASP.NET Core
  • Cara bekerja dengan fail statik di ASP.NET Core
  • Cara menggunakan Middleware Menulis Semula URL di ASP.NET Core
  • Cara melaksanakan pembatasan kadar di ASP.NET Core
  • Cara menggunakan Wawasan Aplikasi Azure di ASP.NET Core
  • Menggunakan ciri NLog canggih dalam ASP.NET Core
  • Cara menangani ralat dalam API Web ASP.NET
  • Cara melaksanakan pengendalian pengecualian global di ASP.NET Core MVC
  • Cara menangani nilai null di ASP.NET Core MVC
  • Versi lanjutan dalam ASP.NET Core Web API
  • Cara bekerja dengan perkhidmatan pekerja di ASP.NET Core
  • Cara menggunakan API Perlindungan Data di ASP.NET Core
  • Cara menggunakan middleware bersyarat dalam ASP.NET Core
  • Cara bekerja dengan keadaan sesi di ASP.NET Core
  • Cara menulis pengawal yang cekap dalam ASP.NET Core