La reescritura de URL consiste en reescribir la dirección URL (sudor ^_^).
Detalles: http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
Ventajas: acortar la URL, etc.
Uso: 1. Descargue URLRewrite.dll de ms y colóquelo en su contenedor
2 Establezca las siguientes configuraciones en web.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuración>
<configSections>
<sección nombre="RewriterConfig" tipo="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Reglas>
<RewriterRule>
<Buscar>~/d(d+).aspx</Buscar>
<Enviar a>~/default.aspx?id=$1</Enviar a>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<add verb="*" path="*.aspx"
type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
Luego escriba en cs:
privado vacío Page_Load (remitente del objeto, System.EventArgs e)
{
//Pon el código de usuario aquí para inicializar la página
Response.Write(Request.QueryString["id"]+"<BR>");
Respuesta.Write("jaja");
}
Simplemente ingrese
localhost/overred/d123.aspx (nota: el comienzo debe ser d, seguido de un número)
De hecho, este d123.aspx es virtual y en realidad no existe. Siempre que se ajuste al formato.
Saltará a http://localhost/overred/default.aspx
y puede capturar algunos parámetros predeterminados, como la identificación, que es el número después de su d (el último debe ser un número), para que pueda mostrar la identificación. como artículo 123.
Si se genera una devolución de datos en la URL reescrita, se pasará a d123.aspx, de modo que el usuario verá la dirección real al hacer clic en el botón. MSDN dice: Pero desde la perspectiva del usuario, si el usuario hace clic en el botón, es posible que lo haga. molestarse por cambios repentinos de URL.
¡Se puede ver que MS considera a los clientes como su Dios! (¿En serio? #¥%…—*)
Paracontinuar citando ms:
Esto sucede porque cuando se representa el formulario web, establece su propiedad de acción directamente en el valor de la ruta del archivo en el objeto Solicitud. Por supuesto, cuando se representa el formulario web, la URL se reescribe de /Products/Beverages.aspx a ListProductsByCategory.aspx?CategoryID=1, lo que indica que el objeto Solicitud informa que el usuario desea acceder a ListProductsByCategory.aspx?CategoryID=1 . Simplemente hacer que el formulario del lado del servidor no muestre las propiedades de la acción resuelve este problema. (De forma predeterminada, el navegador devolverá la publicación si el formulario no contiene propiedades de acción).
Desafortunadamente, Web Forms no le permite especificar propiedades de acción explícitamente, ni le permite establecer ciertas propiedades para deshabilitar la representación de propiedades de acción. . Por lo tanto, debemos extender la clase System.Web.HtmlControls.HtmlForm nosotros mismos, anular el método RenderAttribute() e indicar explícitamente que no representa atributos de acción.
Gracias a la función de herencia, podemos obtener toda la funcionalidad de la clase HtmlForm y obtener el comportamiento deseado con solo agregar unas pocas líneas de código. A continuación se muestra el código completo de la clase personalizada:
namespace ActionlessForm {
Formulario de clase pública: System.Web.UI.HtmlControls.HtmlForm
{
anulación protegida void RenderAttributes (escritor HtmlTextWriter)
{
escritor.WriteAttribute("nombre", este.Nombre);
base.Attributes.Remove("nombre");
escritor.WriteAttribute("método", this.Method);
base.Attributes.Remove("método");
this.Attributes.Render
(escritor);
base.Attributes.Remove("acción");
escritor.WriteAttribute("id", base.ClientID);
}
}
}
El código para el método RenderAttributes() anulado solo contiene el código exacto para el método RenderAttributes() de la clase HtmlForm, sin configurar los atributos de acción. (Usé Reflector de Lutz Roeder para ver el código fuente de la clase HtmlForm).
Después de crear esta clase y compilarla, para usarla en una aplicación web ASP.NET, primero debe agregarla al archivo de referencias de la aplicación web. . Luego, para usarlo en lugar de la clase HtmlForm, simplemente agregue lo siguiente en la parte superior de su página web ASP.NET:
<%@ Register TagPrefix="skm" Namespace="ActionlessForm"
Assembly="ActionlessForm" %>
Luego, reemplace <form runat="server"> (si corresponde) con:
<skm:Form id="Form1" método="post" runat="server">
y a la derecha < Reemplazar la etiqueta /form> con:
</skm:Form>
Lo anterior es heredar un formulario. De hecho, hay una forma más sencilla, que es heredar la página, por lo que no es necesario cambiar nada en la página aspx. .
Código:
usando Sistema;
usando System.IO;
usando System.Web;
la URL del espacio de nombres
System.Web.UI;
{
/**//// <resumen>
/// Clase base de página www.downcodes.com
/// </summary>
clase pública OLPage: Página
{
página OLP pública()
{
}
/**//// <resumen>
/// Anula el método HtmlTextWriter predeterminado y modifica el atributo de valor en la etiqueta del formulario para que su valor sea la URL reescrita en lugar de la URL real.
/// </summary>
/// <param nombre="escritor"></param>
Anulación protegida Renderizado vacío (escritor HtmlTextWriter)
{
si (el escritor es System.Web.UI.Html32TextWriter)
{
escritor = nuevo FormFixerHtml32TextWriter(escritor.InnerWriter);
}
demás
{
escritor = nuevo FormFixerHtmlTextWriter(escritor.InnerWriter);
}
base.Render(escritor);
}
}
clase interna FormFixerHtml32TextWriter: System.Web.UI.Html32TextWriter
{
cadena privada _url; // URL falsa
interna FormFixerHtml32TextWriter(escritor de TextWriter):base(escritor)
{
_url = HttpContext.Current.Request.RawUrl;
}
anulación pública void WriteAttribute (nombre de cadena, valor de cadena, codificación bool)
{
// Si el atributo de salida actual es el atributo de acción de la etiqueta del formulario, reemplace su valor con la URL falsa reescrita
if (_url != null && string.Compare(nombre, "acción", verdadero) == 0)
{
valor = _url;
}
base.WriteAttribute(nombre, valor, codificación);
}
}
clase interna FormFixerHtmlTextWriter: System.Web.UI.HtmlTextWriter
{
cadena privada _url;
FormFixerHtmlTextWriter interno (escritor de TextWriter): base (escritor)
{
_url = HttpContext.Current.Request.RawUrl;
}
anulación pública void WriteAttribute (nombre de cadena, valor de cadena, codificación bool)
{
if (_url != null && string.Compare(nombre, "acción", verdadero) == 0)
{
valor = _url;
}
base.WriteAttribute(nombre, valor, codificación);
}
}
}
¡Lo encapsulas en un dll y puedes extraerlo más tarde simplemente agregando una referencia!
vale, ¡es muy fácil!