La réécriture d'URL consiste à réécrire l'adresse URL (sueur^_^).
Détails : http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
Avantages : raccourcir l'URL, etc.
Utilisation : 1. Téléchargez le fichier URLRewrite.dll de MS et mettez-le dans votre bac
2 . Définissez les paramètres suivants dans web.config :
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Règles>
<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>
Puis écrivez en cs :
private void Page_Load (object sender, System.EventArgs e)
{
//Mettez le code utilisateur ici pour initialiser la page
Response.Write(Request.QueryString["id"]+"<BR>");
Réponse.Write("haha");
}
Entrez simplement
localhost/overred/d123.aspx (remarque : le début doit être d, suivi d'un nombre)
En fait, ce d123.aspx est virtuel et n’existe pas réellement. Tant que cela correspond au format.
Il passera à http://localhost/overred/default.aspx
et pourra capturer certains paramètres par défaut tels que l'identifiant, qui est le numéro après votre d (le dernier doit être un chiffre), afin que vous puissiez afficher l'identifiant. comme l'article 123.
Si une publication est générée dans l'URL réécrite, elle sera transmise à d123.aspx, afin que l'utilisateur voie l'adresse réelle lorsqu'il clique sur le bouton. MSDN dit : Mais du point de vue de l'utilisateur, si l'utilisateur clique sur le bouton, il peut. être dérangé par des changements soudains d’URL.
On voit que Mme considère les clients comme son Dieu ! (Vraiment ? #¥%…—*)
Pourcontinuer à citer ms :
cela se produit car lorsque le formulaire Web est rendu, il définit sa propriété d'action directement sur la valeur du chemin du fichier dans l'objet Request. Bien entendu, lorsque le formulaire Web est rendu, l'URL a été réécrite de /Products/Beverages.aspx en ListProductsByCategory.aspx?CategoryID=1, indiquant que l'objet Request signale que l'utilisateur souhaite accéder à ListProductsByCategory.aspx?CategoryID=1. . Le simple fait que le formulaire côté serveur n'affiche pas les propriétés de l'action résout ce problème. (Par défaut, le navigateur publiera si le formulaire ne contient pas de propriétés d'action.)
Malheureusement, Web Forms ne vous permet pas de spécifier explicitement les propriétés d'action, ni de définir certaines propriétés pour désactiver le rendu des propriétés d'action. . Par conséquent, nous devons étendre nous-mêmes la classe System.Web.HtmlControls.HtmlForm, remplacer la méthode RenderAttribute() et déclarer explicitement qu'elle ne restitue pas les attributs d'action.
Grâce à la fonctionnalité d'héritage, nous pouvons obtenir toutes les fonctionnalités de la classe HtmlForm et obtenir le comportement souhaité en ajoutant simplement quelques lignes de code. Ce qui suit montre le code complet de la classe personnalisée :
namespace ActionlessForm {
Formulaire de classe publique : System.Web.UI.HtmlControls.HtmlForm
{
remplacement protégé void RenderAttributes (écrivain HtmlTextWriter)
{
écrivain.WriteAttribute("nom", this.Name);
base.Attributes.Remove("nom");
écrivain.WriteAttribute("méthode", this.Method);
base.Attributes.Remove("méthode");
this.Attributes.Render
(writer);
base.Attributes.Remove("action");
écrivain.WriteAttribute("id", base.ClientID);
}
}
}
Le code de la méthode RenderAttributes() substituée contient uniquement le code exact de la méthode RenderAttributes() de la classe HtmlForm, sans définir les attributs d'action. (J'ai utilisé Reflector de Lutz Roeder pour afficher le code source de la classe HtmlForm.)
Après avoir créé cette classe et l'avoir compilée, pour l'utiliser dans une application Web ASP.NET, vous devez d'abord l'ajouter au fichier de références de l'application Web. . Ensuite, pour l'utiliser à la place de la classe HtmlForm, ajoutez simplement ce qui suit en haut de votre page Web ASP.NET :
<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
Assembly="ActionlessForm" %>
Ensuite, remplacez <form runat="server"> (le cas échéant) par :
<skm:Form id="Form1" method="post" runat="server">
et à droite < Remplacer la balise /form> avec :
</skm:Form>
Ce qui précède consiste à hériter d'un formulaire. En fait, il existe un moyen plus simple, qui consiste à hériter de la page, vous n'avez donc rien à changer dans la page aspx. .
Code:
utiliser le système ;
en utilisant System.IO ;
en utilisant System.Web ;
l'URL de l'espace de noms
System.Web.UI ;
{
/**//// <résumé>
/// Classe de base de page www.downcodes.com
/// </summary>
classe publique OLPage : Page
{
OLPage publique()
{
}
/**//// <résumé>
/// Remplacez la méthode HtmlTextWriter par défaut et modifiez l'attribut value dans la balise form afin que sa valeur soit l'URL réécrite au lieu de l'URL réelle.
/// </summary>
/// <param name="writer"></param>
remplacement protégé void Render (écrivain HtmlTextWriter)
{
if (l'écrivain est System.Web.UI.Html32TextWriter)
{
écrivain = nouveau FormFixerHtml32TextWriter(writer.InnerWriter);
}
autre
{
écrivain = nouveau FormFixerHtmlTextWriter(writer.InnerWriter);
}
base.Render(écrivain);
}
}
classe interne FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
chaîne privée _url ; // Fausse URL
interne FormFixerHtml32TextWriter(TextWriterwriter):base(writer)
{
_url = HttpContext.Current.Request.RawUrl ;
}
remplacement public void WriteAttribute (nom de chaîne, valeur de chaîne, encodage booléen)
{
// Si l'attribut actuellement affiché est l'attribut d'action de la balise form, remplacez sa valeur par la fausse URL réécrite
if (_url != null && string.Compare(name, "action", true) == 0)
{
valeur = _url ;
}
base.WriteAttribute(nom, valeur, encodage);
}
}
classe interne FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
chaîne privée _url ;
interne FormFixerHtmlTextWriter (écrivain TextWriter): base (écrivain)
{
_url = HttpContext.Current.Request.RawUrl ;
}
remplacement public void WriteAttribute (nom de chaîne, valeur de chaîne, encodage booléen)
{
if (_url != null && string.Compare(name, "action", true) == 0)
{
valeur = _url ;
}
base.WriteAttribute(nom, valeur, encode);
}
}
}
Vous l'encapsulez dans une DLL, et vous pourrez l'extraire plus tard en ajoutant simplement une référence !
ok, c'est si simple !