Untuk memahami sepenuhnya topik yang dibahas nanti dalam artikel ini, kita harus memahami secara singkat proses komunikasi antara IIS dan ASP.NET. Yang saya jelaskan disini adalah server IIS 6. Sedangkan untuk IIS 5 dan IIS 7, yang pertama dapat dikatakan telah dihilangkan, sedangkan "mode klasik" yang terakhir sama persis dengan IIS 6, dan "mode pipa" yang baru sebenarnya berbicara tentang beberapa konsep dalam ASP. NET dan IIS. Saya yakin jika Anda memahami IIS 6 dan ASP.NET, Anda tidak akan mengalami masalah apa pun dalam mode terintegrasi IIS 7.
Pertama, mari kita lihat diagram skematik sederhana, yang menunjukkan beberapa langkah utama dalam keseluruhan proses IIS mulai dari menerima Permintaan hingga mengembalikan Respons:
Jika Anda ingin melakukan Penulisan Ulang URL dalam aplikasi ASP.NET, Anda biasanya memanggil metode RewritePath dari HttpContext di acara BeginRequest untuk memposisikan ulang permintaan ke URL target. Misalnya, kita dapat mengganti metode Application_BeginRequest di Global.asax untuk mencapai hal ini:
Alasan mengapa Rewrite dilakukan di BeginRequest adalah karena kejadian ini adalah yang paling awal dipicu di antara semua kejadian Pipeline. Setelah pemosisian ulang saat ini, beberapa properti di HttpContext saat ini juga telah berubah (seperti HttpContext.Request.Path). Dengan cara ini, logika pengendali peristiwa Pipeline berikut akan terpengaruh. Misalnya, ketika izin perlu ditentukan berdasarkan direktori, jalur "terletak" akan digunakan alih-alih permintaan yang diterima oleh ASP.NET. Tentu saja, perubahan yang paling "signifikan" adalah pilihan Handler. Misalnya, dalam contoh di atas, kami memindahkan permintaan ke file "CustomerList.aspx", sehingga mesin ASP.NET akan memilih System.Web.UI sesuai dengan *.aspx. Kelas PageHandlerFactory menangani permintaan.
kelas publik Global : Sistem.Web
{
dilindungi kekosongan Application_BeginRequest (pengirim objek , EventArgs e)
{
Konteks HttpContext = HttpContext .Saat ini;
if (context.Request.Path.Equals( "/Pelanggan" ,
Perbandingan String .InvariantCultureIgnoreCase))
{
konteks.RewritePath( "~/CustomerList.aspx" );
}
}
}
Sebagai penutup, ada dua konsep yang perlu dibedakan, yaitu "ASP.NET Pipeline" dan "Web Forms". Keduanya merupakan model penting dalam ASP.NET, namun perbedaannya masih sangat besar:
Faktanya, kata "bentuk" pada kalimat di atas mungkin tidak tepat. Karena Formulir Web mungkin merupakan mesin dan model eksekusi yang dapat digunakan secara independen, dan System.Web.UI.PageHandlerFactory hanya menggunakan model ini. Saat kita menulis aplikasi ASP.NET, kita dapat menggunakan model ini di tempat lain sesuai kebutuhan kita. Misalnya, dalam artikel " Teknik: Menggunakan Kontrol Pengguna untuk Pembuatan HTML ", kami menggunakan ascx sebagai templat di Generic Handler untuk menghasilkan konten.