Penulisan ulang URL adalah menulis ulang alamat URL (keringat^_^).
Detail: http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
Keuntungan: memperpendek url, dll.
Penggunaan: 1. Unduh URLRewrite.dll ms dan masukkan ke dalam bin Anda
2 Tetapkan pengaturan berikut di web.config:
<?xml version="1.0" coding="utf-8" ?>
<konfigurasi>
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Aturan>
<RewriterRule>
<LookFor>~/d(d+).aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<tambahkan kata kerja = "*" path = "*.aspx"
type = "URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
Kemudian tulis di cs:
private void Page_Load(pengirim objek, System.EventArgs e)
{
//Masukkan kode pengguna di sini untuk menginisialisasi halaman
Response.Write(Request.QueryString["id"]+"<BR>");
Respon.Write("haha");
}
Masukkan saja
localhost/overred/d123.aspx (catatan: awalan harus d, diikuti angka)
Sebenarnya d123.aspx ini bersifat virtual dan sebenarnya tidak ada. Asalkan sesuai dengan formatnya.
Ini akan melompat ke http://localhost/overred/default.aspx
dan dapat menangkap beberapa parameter secara default seperti id, yang merupakan nomor setelah d Anda (yang terakhir harus berupa angka), sehingga Anda dapat menampilkan id sebagai 123 artikel.
Jika postback dibuat dalam URL yang ditulis ulang, itu akan diteruskan ke d123.aspx, sehingga pengguna akan melihat alamat sebenarnya ketika mengklik tombol MSDN mengatakan: Tapi dari sudut pandang pengguna, jika pengguna mengklik tombol Mereka mungkin terganggu oleh perubahan URL yang tiba-tiba.
Terlihat bahwa ms menganggap pelanggan sebagai Tuhannya! (Benarkah? #¥%…—*)
Untukmelanjutkan mengutip ms:
Hal ini terjadi karena ketika Formulir Web dirender, ia menyetel properti tindakannya secara langsung ke nilai jalur file di objek Permintaan. Tentu saja, ketika formulir Web dirender, URL telah ditulis ulang dari /Products/Beverages.aspx menjadi ListProductsByCategory.aspx?CategoryID=1, yang menunjukkan bahwa objek Permintaan melaporkan bahwa pengguna ingin mengakses ListProductsByCategory.aspx?CategoryID=1 . Cukup membuat formulir sisi server tidak merender properti tindakan akan menyelesaikan masalah ini. (Secara default, browser akan memposting kembali jika formulir tidak berisi properti tindakan.)
Sayangnya, Formulir Web tidak mengizinkan Anda menentukan properti tindakan secara eksplisit, juga tidak mengizinkan Anda menyetel properti tertentu untuk menonaktifkan rendering properti tindakan. . Oleh karena itu, kita harus memperluas sendiri kelas System.Web.HtmlControls.HtmlForm, mengganti metode RenderAttribute() dan secara eksplisit menyatakan bahwa metode tersebut tidak merender atribut tindakan.
Berkat fitur pewarisan, kita bisa mendapatkan semua fungsionalitas kelas HtmlForm dan mendapatkan perilaku yang diinginkan hanya dengan menambahkan beberapa baris kode. Berikut ini menunjukkan kode lengkap dari kelas kustom:
namespace ActionlessForm {
kelas publik Formulir : System.Web.UI.HtmlControls.HtmlForm
{
penggantian yang dilindungi batal RenderAttributes (penulis HtmlTextWriter)
{
writer.WriteAttribute("nama", ini.Nama);
base.Attributes.Remove("nama");
penulis.WriteAttribute("metode", ini.Metode);
base.Attributes.Remove("metode");
this.Attributes.Render(writer);
base.Attributes.Remove("
action");
penulis.WriteAttribute("id", base.ClientID);
}
}
}
Kode untuk metode RenderAttributes() yang diganti hanya berisi kode persis untuk metode RenderAttributes() kelas HtmlForm, tanpa menyetel atribut tindakan. (Saya menggunakan Reflektor Lutz Roeder untuk melihat kode sumber kelas HtmlForm.)
Setelah Anda membuat kelas ini dan mengkompilasinya, untuk menggunakannya dalam aplikasi web ASP.NET, Anda harus menambahkannya terlebih dahulu ke file Referensi aplikasi web . Kemudian, untuk menggunakannya sebagai pengganti kelas HtmlForm, tambahkan saja yang berikut ini ke bagian atas halaman web ASP.NET Anda:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
Majelis="ActionlessForm" %>
Lalu, ganti <form runat="server"> (jika ada) dengan:
<skm:Form id="Form1" method="post" runat="server">
dan di sebelah kanan < Ganti tag /form> dengan:
</skm:Form>
Di atas adalah untuk mewarisi suatu form. Sebenarnya ada cara yang lebih sederhana yaitu dengan mewarisi halaman, jadi Anda tidak perlu mengubah apa pun di halaman aspx. .
Kode:
menggunakan Sistem;
menggunakan Sistem.IO;
menggunakan Sistem.Web;
URL namespace
System.Web.UI
{
/**//// <ringkasan>
/// Kelas dasar halaman www.downcodes.com
/// </ringkasan>
OLPage kelas publik : Halaman
{
Halaman OL publik()
{
}
/**//// <ringkasan>
/// Ganti metode HtmlTextWriter default dan ubah atribut value dalam tag formulir sehingga nilainya adalah URL yang ditulis ulang dan bukan URL sebenarnya.
/// </ringkasan>
/// <param nama="penulis"></param>
override yang dilindungi void Render (penulis HtmlTextWriter)
{
jika (penulisnya adalah System.Web.UI.Html32TextWriter)
{
penulis = new FormFixerHtml32TextWriter(writer.InnerWriter);
}
kalau tidak
{
penulis = new FormFixerHtmlTextWriter(writer.InnerWriter);
}
base.Render(penulis);
}
}
kelas internal FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
string pribadi _url; // URL palsu
internal FormFixerHtml32TextWriter(Penulis Teks):base(penulis)
{
_url = HttpContext.Current.Request.RawUrl;
}
public override void WriteAttribute (nama string, nilai string, bool encode)
{
// Jika atribut keluaran saat ini adalah atribut tindakan dari tag formulir, ganti nilainya dengan URL palsu yang ditulis ulang
if (_url != null && string.Bandingkan(nama, "tindakan", benar) == 0)
{
nilai = _url;
}
base.WriteAttribute(nama, nilai, penyandian);
}
}
kelas internal FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
string pribadi _url;
FormFixerHtmlTextWriter internal(penulis TextWriter):base(penulis)
{
_url = HttpContext.Current.Request.RawUrl;
}
public override void WriteAttribute (nama string, nilai string, bool encode)
{
if (_url != null && string.Bandingkan(nama, "tindakan", benar) == 0)
{
nilai = _url;
}
base.WriteAttribute(nama, nilai, encode);
}
}
}
Anda merangkumnya menjadi dll, dan Anda dapat menariknya nanti hanya dengan menambahkan referensi!
oke, itu sangat mudah!