Vi en Internet que muchos amigos reescriben URL en asp.net y usan el método HttpHandle+Server.Transfer. De hecho, este método es incorrecto. En primer lugar, HttpHandle no puede implementar urlrewrite; en segundo lugar, Server.Transfer es una redirección estándar, no urlrewrite en absoluto.
De hecho, no necesita implementar su propio HttpHandle o HttpModule para implementar urlrewrite. Se puede implementar fácilmente con unas pocas líneas de código.
Lo que estoy presentando aquí es en un host virtual. El host virtual es diferente de su propio servidor. No tiene permiso para modificar iis ni para instalar complementos de iis como iis rewrite. Pero aún podemos completar fácilmente las funciones requeridas.
El método específico es el siguiente: abra global.asax.cs y busque el vacío protegido Application_BeginRequest (remitente del objeto, EventArgs e). Por el nombre del método, creo que puedo adivinar lo que hace. Ingrese el siguiente código:
protected void Application_BeginRequest(Remitente del objeto, EventArgs e)
{
cadena oldUrl = HttpContext.Current.Request.RawUrl;
patrón de cadena = @"^(.+)default/(d+).aspx(?.*)*$";
reemplazo de cadena = "$1default.aspx?id=$2";
if(Regex.IsMatch(oldUrl, patrón, RegexOptions.IgnoreCase | RegexOptions.Compiled))
{
cadena nuevaUrl = Regex.Replace(oldUrl, patrón, reemplazar, RegexOptions.Compiled | RegexOptions.IgnoreCase);
this.Context.RewritePath(nuevaUrl);
}
}
Con el código anterior, accedo a una URL similar a: .../default/123.aspx. Por supuesto, esta URL no existe en mi computadora, por lo que será dirigida a: .../default.aspx. =123.
Por supuesto, utilizando potentes expresiones regulares, puede reescribir la URL según sus propias necesidades. Todo esto se hace de forma silenciosa en el lado del servidor y el cliente no se dará cuenta. Como está en un host virtual, solo podemos redirigir el archivo .aspx. Si es nuestro propio servidor, podemos procesar cualquier sufijo simplemente registrando el sufijo en iis. Por ejemplo, puede registrar un tipo como *.myweb, de modo que cuando otros visiten default/456.myweb, pueda redirigirlo a default.aspx?id=456. En una palabra, siempre que pueda pensar en ello, .net puede ayudarlo a darse cuenta, y todo esto no requiere mucho código.