Beim URL-Umschreiben wird die URL-Adresse neu geschrieben (sweat^_^).
Details: http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
Vorteile: URL kürzen usw.
Verwendung: 1. Laden Sie die URLRewrite.dll von ms herunter und legen Sie sie in Ihren Papierkorb
. 2 . Legen Sie die folgenden Einstellungen in web.config fest:
<?xml version="1.0" binding="utf-8" ?>
<configuration>
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/d(d+).aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<add verb="*" path="*.aspx"
type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
Dann schreiben Sie in cs:
private void Page_Load(object sender, System.EventArgs e)
{
//Geben Sie hier den Benutzercode ein, um die Seite zu initialisieren
Response.Write(Request.QueryString["id"]+"<BR>");
Response.Write("haha");
}
Geben Sie einfach
localhost/overred/d123.aspx ein (Hinweis: Der Anfang muss d sein, gefolgt von einer Zahl)
Tatsächlich ist diese d123.aspx virtuell und existiert nicht tatsächlich. Solange es zum Format passt.
Es springt zu http://localhost/overred/default.aspx
und kann standardmäßig einige Parameter erfassen, z. B. die ID, die Zahl nach Ihrem d (die letzte muss eine Zahl sein), sodass Sie die ID anzeigen können als 123 Artikel.
Wenn in der umgeschriebenen URL ein Postback generiert wird, wird es an d123.aspx übergeben, sodass der Benutzer die tatsächliche Adresse sieht, wenn er auf die Schaltfläche klickt durch plötzliche URL-Änderungen gestört werden.
Man sieht, dass Frau Kunden als ihren Gott betrachtet! (Wirklich? #¥%…—*)
Umweiterhin ms zu zitieren:
Dies geschieht, weil das Webformular beim Rendern seine Aktionseigenschaft direkt auf den Wert des Dateipfads im Request-Objekt setzt. Beim Rendern des Webformulars wurde die URL natürlich von /Products/Beverages.aspx in ListProductsByCategory.aspx?CategoryID=1 umgeschrieben, was darauf hinweist, dass das Request-Objekt meldet, dass der Benutzer auf ListProductsByCategory.aspx?CategoryID=1 zugreifen möchte . Dieses Problem lässt sich einfach dadurch lösen, dass das serverseitige Formular die Aktionseigenschaften nicht rendert. (Standardmäßig sendet der Browser eine Rückmeldung, wenn das Formular keine Aktionseigenschaften enthält.)
Leider können Sie in Web Forms weder Aktionseigenschaften explizit angeben noch bestimmte Eigenschaften festlegen, um die Darstellung von Aktionseigenschaften zu deaktivieren. . Daher müssen wir die Klasse System.Web.HtmlControls.HtmlForm selbst erweitern, die Methode RenderAttribute() überschreiben und explizit angeben, dass sie keine Aktionsattribute rendert.
Dank der Vererbungsfunktion können wir die gesamte Funktionalität der HtmlForm-Klasse erhalten und das gewünschte Verhalten erzielen, indem wir nur ein paar Codezeilen hinzufügen. Das Folgende zeigt den vollständigen Code der benutzerdefinierten Klasse:
namespace ActionlessForm {
öffentliches Klassenformular: System.Web.UI.HtmlControls.HtmlForm
{
protected override void RenderAttributes(HtmlTextWriter-Writer)
{
write.WriteAttribute("name", this.Name);
base.Attributes.Remove("name");
writer.WriteAttribute("method", this.Method);
base.Attributes.Remove("method");
this.Attributes.Render
(writer);
base.Attributes.Remove("action");
write.WriteAttribute("id", base.ClientID);
}
}
}
Der Code für die überschriebene RenderAttributes()-Methode enthält nur den genauen Code für die RenderAttributes()-Methode der HtmlForm-Klasse, ohne die Aktionsattribute festzulegen. (Ich habe den Reflector von Lutz Roeder verwendet, um den Quellcode der HtmlForm-Klasse anzuzeigen.)
Nachdem Sie diese Klasse erstellt und kompiliert haben, sollten Sie sie zur Verwendung in einer ASP.NET-Webanwendung zunächst der Referenzdatei der Webanwendung hinzufügen . Um es dann anstelle der HtmlForm-Klasse zu verwenden, fügen Sie einfach Folgendes oben auf Ihrer ASP.NET-Webseite hinzu:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
Assembly="ActionlessForm" %>
Ersetzen Sie dann <form runat="server"> (falls vorhanden) durch:
<skm:Form id="Form1" method="post" runat="server">
und rechts < Ersetzen das /form>-Tag mit:
</skm:Form>
Das Obige besteht darin, ein Formular zu erben. Tatsächlich gibt es eine einfachere Möglichkeit, nämlich die Seite zu erben, sodass Sie nichts an der ASPX-Seite ändern müssen .
Code:
Verwenden des Systems;
mit System.IO;
mit System.Web;
mit System.Web.UI;
Namespace-URL
{
/**//// <Zusammenfassung>
/// Seitenbasisklasse www.downcodes.com
/// </summary>
öffentliche Klasse OLPage: Seite
{
öffentliche OLPage()
{
}
/**//// <Zusammenfassung>
/// Überschreiben Sie die Standardmethode HtmlTextWriter und ändern Sie das Wertattribut im Formular-Tag, sodass sein Wert die umgeschriebene URL anstelle der tatsächlichen URL ist.
/// </summary>
/// <param name="writer"></param>
protected override void Render(HtmlTextWriter-Writer)
{
if (Writer ist System.Web.UI.Html32TextWriter)
{
writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
}
anders
{
writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
}
base.Render(writer);
}
}
interne Klasse FormFixerHtml32TextWriter: System.Web.UI.Html32TextWriter
{
private string _url; // Gefälschte URL
intern FormFixerHtml32TextWriter(TextWriterwriter):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
public override void WriteAttribute(string name, string value, bool encode)
{
// Wenn das aktuell ausgegebene Attribut das Aktionsattribut des Formular-Tags ist, ersetzen Sie seinen Wert durch die umgeschriebene gefälschte URL
if (_url != null && string.Compare(name, "action", true) == 0)
{
Wert = _url;
}
base.WriteAttribute(name, value, encode);
}
}
interne Klasse FormFixerHtmlTextWriter: System.Web.UI.HtmlTextWriter
{
private Zeichenfolge _url;
interner FormFixerHtmlTextWriter(TextWriterwriter):base(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
public override void WriteAttribute(string name, string value, bool encode)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
Wert = _url;
}
base.WriteAttribute(name, value, encode);
}
}
}
Sie kapseln es in eine DLL und können es später abrufen, indem Sie einfach eine Referenz hinzufügen!
Ok, es ist so einfach!