Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 20191|Jawab: 0

[ASP.NET] Asp.Net IHttpHandler diperkenalkan

[Salin tautan]
Diposting pada 13/03/2018 21.40.17 | | | |
Asp.Net IHttpHandler diperkenalkan
ASP.NET dua antarmuka pemrosesan yang umum digunakan saat menanggapi permintaan Http adalah IHttpHandler dan IHttpModule.

Secara umum, IHttpHandler digunakan untuk menangani jenis permintaan tertentu, seperti pemrosesan terpisah dari setiap file *.asp, *.aspx. IHttpModule biasanya digunakan untuk menangani operasi yang umumnya diperlukan untuk permintaan, seperti melakukan beberapa pemeriksaan yang sama pada halaman permintaan.

Mari kita lihat langkah-langkah pemrosesan server IIS saat membuat permintaan HTTP yang sesuai. ASP.NET memiliki konsep alur, yang berarti bahwa setiap permintaan ASP.NET akan memiliki serangkaian operasi yang sesuai di IIS untuk membentuk urutan seperti baris.

ASP.NET Pengenalan pipa

Mari kita lihat diagram waktu pemrosesan alur:




Seperti yang dapat dilihat dari gambar, setelah permintaan tiba, implementasi diproses oleh HttpModule dan kemudian metode ProcessRequest() dari HttpHandler dipanggil untuk membuat respons tertentu. Oleh karena itu, tidak sulit untuk melihat mengapa penanganan permintaan khusus kelas ditempatkan di kelas HttpHandler sambil melakukan beberapa pemeriksaan yang umum untuk semua permintaan di HttpModule.

Praktik kode
IHttpHandler

Penulis baru-baru ini menemukan penggunaan IHttpHandler untuk menangani panggilan antarmuka klien dalam proyek, jadi mari kita bahas secara singkat desain antarmuka sederhana berdasarkan IHttpHandler.

Antarmuka IHttpHandler hanya memiliki dua anggota:


Atribut IsReusable mengidentifikasi apakah objek HttpHandler dapat digunakan oleh instance lain, dan kami biasanya mengaturnya ke True. Metode ProcessRequest() adalah respons khusus terhadap permintaan, dan kita hanya perlu menempatkan operasi logika bisnis tertentu di sini.

Pertama, buat proyek web baru dan tambahkan kelas Handler:

Kelas RayHandler mengimplementasikan fungsi ProcessRequest() dari antarmuka IHttpHandler, yang hanyalah output langsung dari sepotong teks.

Kemudian kita perlu menambahkan konfigurasi berikut dalam file Web.config:


path menunjukkan pencocokan URL, seperti *.ray, yang berarti bahwa Handler akan merespons permintaan URL yang diakhiri dengan ".ray", kata kerja menunjukkan metode permintaan, seperti Get/Post, dan * berarti cocok dengan semua. type menunjukkan jenis kelas Handler, WebApplication2.RayHandler adalah nama kelas, WebApplication2 mengacu pada nama rakitan di direktori Bin, misalnya, nama rakitan dalam contoh adalah WebApplication2.dll, dan tidak perlu menentukan nama akhiran di sini.

Mulai situs, masukkan URL yang diakhiri dengan ".ray", dan Anda dapat melihat hasil berikut:



Ikhtisar IHttpHandlerFactory

Terkadang kita mungkin perlu berurusan dengan beberapa akhiran yang berbeda, satu akhiran yang sesuai dengan kelas Handler, dan seperti inilah tampilan file Web.config kita:


Jika kita memiliki banyak kelas implementasi HttpHandler, maka konfigurasi file Web.config kita pasti akan terlihat bertele-tele. Atau dalam beberapa kasus, ketika kita hanya dapat menentukan Handler mana yang merespons saat program sedang berjalan, kita perlu menggunakan IHttpHandlerFactory.

IHttpHandlerFactory didefinisikan sebagai berikut:


Diantaranya:

GetHandler(): Mengembalikan instans yang mengimplementasikan antarmuka IHttpHandler;
ReleaseHandler(): Memungkinkan Factory untuk menggunakan kembali instans Handler yang ada.
Ambil permintaan ray dan rss di atas sebagai contoh, terapkan kelas Factory:

Dalam hal ini, konfigurasi di Web.config adalah sebagai berikut:


Pada saat ini, fungsi menggunakan kelas Factory untuk sesuai dengan penangan spesifik yang berbeda diimplementasikan, menyederhanakan konfigurasi.

IHttpHandlerFactory yang Dapat Diskalakan

Dalam implementasi di atas, jika program perlu menambahkan metode penanganan akhiran baru di masa mendatang, program perlu memodifikasi pernyataan Switch di GetHandler(), yang juga dapat menyebabkan kesalahan atau membawa risiko keamanan lainnya. Jadi, apakah mungkin untuk menjaga kelas HandlerFactory tidak berubah untuk ekstensi berikutnya?

Jawabannya pasti ya. Pembaca yang akrab dengan pola desain harus memahami bahwa ini adalah pola pabrik yang sederhana, dan untuk mencapai fungsi sebelumnya, kita dapat menggunakan mode desain yang disebut poin lanjutan.

Dan di sini, kita juga dapat menggunakan fitur bahasa dari bahasa C# - refleksi. Melalui mekanisme refleksi C#, kita mencerminkan jenis Hanlder yang sesuai sesuai dengan akhiran URL, selama kita menyetujui korespondensi antara nama akhiran URL dan nama kelas Handler.

Misalnya, kami menulis ulang GetHandler() sebagai berikut:

Dalam hal ini, Anda hanya perlu menempatkan kelas Handler dalam metode di bawah namespace yang sama dengan kelas HandlerFactory dan mengonfigurasinya dengan benar di Web.config. Misalnya, jika ada kelas RayHandler, maka konfigurasi berikut harus ditambahkan agar cocok secara otomatis:



ringkasan
Artikel ini secara singkat memperkenalkan penggunaan IHttpHandler dalam ASP.NET, menyediakan implementasi IHttpHandlerFactory dalam pemrosesan beberapa permintaan Handler, dan terakhir, meningkatkan implementasi Handler multi-permintaan yang dapat diskalakan menggunakan mekanisme refleksi C#.





Mantan:asp.net Arti Penjelasan dari HttpContext
Depan:asp.net antarmuka IHttpModule dijelaskan secara rinci
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com