Cara membuat kekangan laluan di ASP.NET Core

Kekangan laluan dalam ASP.NET Core digunakan untuk menyaring atau menyekat data yang tidak diingini daripada mencapai tindakan pengawal anda. Untuk peneraju penghalaan dalam ASP.NET Core, anda boleh merujuk pada artikel saya sebelumnya mengenai perutean berdasarkan atribut berbanding perutean berdasarkan konvensyen di ASP.NET Core. Artikel ini melangkaui asas untuk meneroka operasi lanjutan menggunakan kekangan laluan.

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 MVC di Visual Studio 2019

Pertama, mari buat projek ASP.Net Core di Visual Studio 2019. Dengan andaian Visual Studio 2019 dipasang di sistem anda, ikuti langkah-langkah yang digariskan di bawah untuk membuat projek ASP.Net Core 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 menggunakan kekangan laluan dalam ASP.NET Core 3.1.

Kelas RouteCollection di ASP.NET Core

Kelas RouteTable di ASP.NET Core mengandungi harta tanah bernama Routes yang menyimpan semua laluan sebagai RouteCollection. Kelas RouteCollection mengandungi beberapa kaedah peluasan yang boleh digunakan untuk memetakan laluan atau mengabaikannya.

MapRoute adalah kaedah yang terlalu banyak yang menerima kekangan sebagai parameter. Anda boleh menggunakan ini untuk melewati kekangan anda ke laluan. Berikut adalah pengisytiharan kaedah MapRoute.

Peta Laluan statik awam (laluan RouteCollection ini, nama rentetan,

    rentetan url, lalai objek, kekangan objek);

Antara muka IRouteConstraint dalam ASP.NET Core

Antara muka IRouteConstraint adalah kontrak yang mengandungi pengisytiharan hanya satu kaedah bernama Match. Antaramuka ini mesti diperluas oleh kelas dan kaedah Match diterapkan di dalamnya untuk memeriksa apakah parameter URL tertentu berlaku untuk kekangan. Inilah cara antara muka IRouteConstraint ditakrifkan:

namespace Microsoft.AspNetCore.Routing

{

    antara muka awam IRouteConstraint

    {

        padanan bool (

            HttpContext httpContext,

            Laluan IRouter,

            laluan rentetan Key,

            Nilai RouteValueDictionary,

            RouteDirection routeDirection);

    }

}

Kamus ConstraintMap dalam ASP.NET Core

ConstraintMap adalah kamus yang mengandungi senarai kekangan laluan yang memetakan kunci kekangan laluan ke pelaksanaan IRouteConstraint. Coretan kod yang diberikan di bawah menggambarkan bagaimana anda dapat menambahkan batasan tersuai anda ke kamus ini.

kekosongan awam ConfigureServices (perkhidmatan IServiceCollection) 

{  

  perkhidmatan. Konfigurasikan (routeOptions =>  

  { 

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

  }); 

Laksanakan kaedah IRouteConstraint Match dalam ASP.NET Core

Untuk membuat kekangan laluan tersuai, anda harus membuat kelas yang memperluas antara muka IRouteConstraint dan menerapkan kaedah Matchnya. Kekangan itu dapat digunakan untuk menggagalkan permintaan masuk yang tidak diingini dan mencegah rute agar tidak sesuai kecuali keadaan tertentu dipenuhi. Sebagai contoh, anda mungkin ingin memastikan bahawa parameter yang diteruskan ke kaedah tindakan selalu berupa bilangan bulat.

Kaedah Match menerima parameter berikut:

  • HttpContext - merangkum semua maklumat khusus HTTP mengenai permintaan
  • IRouter - mewakili penghala yang akan menerapkan kekangan
  • RouteKey - mewakili parameter laluan yang sedang disahkan
  • RouteDirection - enum yang mengandungi dua nilai, iaitu IncomeRequest dan UrlGeneration, dan digunakan untuk menunjukkan sama ada URL sedang diproses dari permintaan HTTP atau menghasilkan URL
  • RouteValues ​​- mengandungi parameter URL

Struktur kekangan laluan tersuai di ASP.NET Core

Berikut adalah contoh struktur kekangan laluan tersuai:

kelas awam CustomRouteConstraint: IRouteConstraint

    {

        Public bool Match (HttpContext httpContext, laluan IRouter,

        string routeKey, nilai RouteValueDictionary,

        RouteDirection routeDirection)

        {

            membuang NotImplementedException baru ();

        }

    }

Contoh kekangan laluan tersuai dalam ASP.NET Core

Mari kita laksanakan kekangan laluan tersuai yang dapat memeriksa Id e-mel. Pertama, buat kelas yang memperluas antara muka IRouteConstraint dan menerapkan kaedah Match. Coretan kod berikut menunjukkan kelas kekangan laluan khusus bernama EmailRouteContraint yang memperluas antara muka IRouteConstraint.

kelas awam EmailRouteContraint: IRouteConstraint

    {

        Public bool Match (HttpContext httpContext, laluan IRouter,

        string routeKey, nilai RouteValueDictionary,

        RouteDirection routeDirection)

        {

            kembali benar;

        }

    }

Penyenaraian kod berikut menunjukkan kelas EmailRouteConstraint dengan kaedah Match dilaksanakan.

kelas awam EmailRouteContraint: IRouteConstraint

    {

        Public bool Match (HttpContext httpContext, laluan IRouter,

        string routeKey, nilai RouteValueDictionary,

        RouteDirection routeDirection)

        {

            jika (nilai.TryGetValue (routeKey, out var routeValue))

            {

                var parameterValueString = Tukar.ToString (routeValue,

                CultureInfo.InvariantCulture);

                mengembalikan IsEmailAddressValid (parameterValueString);

            }

            kembali palsu;

        }

        bool peribadi IsEmailAddressValid (string emailAddress)

        {

            kembali benar;

        }

    }

Perhatikan kaedah IsEmailAddressValid di sini hanya mengembalikan "benar". Saya menyerahkan kepada anda untuk menulis kod yang diperlukan untuk mengesahkan alamat e-mel.

Daftarkan kekangan laluan tersuai di ASP.NET Core

Anda harus mendaftarkan batasan laluan tersuai anda dengan sistem perutean dalam kaedah ConfigureServices kelas Startup. Coretan kod berikut menggambarkan perkara ini. 

kekosongan awam ConfigureServices (perkhidmatan IServiceCollection)

      {

          perkhidmatan.AddControllersWithViews ();

          perkhidmatan. Konfigurasikan (routeOptions =>

          {

              routeOptions.ConstraintMap.Add ("ERC",

              typeof (EmailRouteContraint));

          });

      }

Anda juga harus mengkonfigurasi batasan laluan tersuai anda dalam kaedah Konfigurasi kelas Permulaan seperti yang ditunjukkan dalam potongan kode di bawah.

app.UseEndpoints (titik akhir =>

{

     titik akhir. PetaControllerRoute (

         nama: "lalai",

         kekangan: baru {ERC = baru EmailRouteContraint ()},

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

});

Dan itu sahaja. Anda kini dapat menentukan kekangan dalam pengawal atau kaedah tindakan anda dan mula menggunakan aplikasi tersebut.

Waktu operasi Teras ASP.NET mengesahkan jika corak dan batasan laluan yang ditentukan sepadan dengan corak dan nilai permintaan yang masuk. Logik pengesahan kekangan ditentukan dalam kaedah Padanan kekangan laluan tersuai anda. Anda dapat memanfaatkan kekangan untuk menghindari permintaan yang tidak perlu serta mengesahkan nilai laluan sebelum permintaan diteruskan ke metode tindakan.

Cara melakukan lebih banyak perkara dalam ASP.NET Core:

  • Cara menguruskan rahsia pengguna di ASP.NET Core
  • Cara membina aplikasi gRPC di ASP.NET Core
  • Cara mengarahkan permintaan dalam ASP.NET Core
  • Cara menggunakan atribut routing 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