La página no redirige correctamente, reescritura de URL (ASP.NET)
-
28-10-2019 - |
Pregunta
Estoy trabajando en URL Rewrite y encontré un tutorial en el sitio de ASP.NET, la forma en que lo estoy haciendo es
Url que estoy entrando http: // localhost: 1573/webnew/web/first-web
Ahora tengo una clase Wriiten One
public class FixURLs : IHttpModule
{
public FixURLs()
{
//
// TODO: Add constructor logic here
//
}
#region IHttpModule Members
public void Dispose()
{
// do nothing
}
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
#endregion
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
/*// checking page extension
switch (System.IO.Path.GetExtension(app.Request.Url.AbsoluteUri.ToLower()))
{
case ".bmp":
case ".gif":
case ".jpg":
case ".jpe":
case ".jpeg":
case ".png":
case ".css":
case ".js":
case ".txt":
case ".swf":
// don't redirect, these requests may required in many cases
return;
break;
}*/
if (app.Request.RawUrl.ToLower().Contains("/web/"))
{
**if (app.Request.RawUrl.ToLower().Contains(".png")
|| app.Request.RawUrl.ToLower().Contains(".gif")
|| app.Request.RawUrl.ToLower().Contains(".js"))
{
return;
} **
DatabaseLayer dbLayer = new DatabaseLayer();
string urlFromBrowser = app.Request.RawUrl.ToLower();
string[] urlFormat = urlFromBrowser.Split('/');
urlFromBrowser = urlFormat.GetValue(2).ToString() + "/" + urlFormat.GetValue(3).ToString();
int WebId = dbLayer.GetWebURLId(urlFromBrowser.Trim());
app.Context.RewritePath("Default.aspx", "", "WebId="+WebId);
}
}
Pero el problema es que no se está redirigiendo a la página predeterminada.aspx.
Estoy recibiendo el siguiente error:
Descripción: HTTP 404. El recurso que está buscando (o una de sus dependencias) podría haberse eliminado, si hubiera cambiado su nombre o no está disponible temporalmente. Revise la siguiente URL y asegúrese de que se escriba correctamente.
URL solicitada: /webnew/web/default.aspx
Puedo ver que está solicitando la url /webnew/web/default.aspx pero solo necesito /webnew/default.aspx?wid=2
Por favor ayúdame
EDITAR
Gracias por la respuesta, pero no puedo aceptar su respuesta ni el botón de comentarios está funcionando para mí, esa es la razón por la que estoy editando mi publicación. Estoy recibiendo error de JavaScript: el objeto esperado y la pregunta del objeto es nula.
@Waqas raja gracias por su respuesta, ahora está funcionando bien. Pero cuando coloqué el punto de interrupción en (! Ispostback) Evento de Page. 8 veces. Después de cargar la página, pocas imágenes se han ido. ¿Es la actualización múltiple el problema? Cualquier idea de por qué va una y otra vez al evento if (! Ispostback). Gracias por tu ayuda
Edición1
@Waqas raja. Aceptaré su respuesta después de iniciar sesión desde el navegador diferente.
Edición2
@Waqas raja estoy mostrando imagen en mi página de inicio como esta
Hay otras pocas imágenes que también se muestran de esta manera, todas vienen correctamente cuando se cargan normalmente, pero cuando estoy usando URL Reescritura, solo puedo ver el texto alternativo.
He probado esto también
Pero el mismo resultado. :-( ¿cualquier sugerencia?
Al verificar la URL en bruto, puedo ver que hay muchas solicitudes que no sean la página, es decir, JPG, .js al igual que usted mencionó. He actualizado el código, ¿es correcto? Porque no puedo ver imágenes y pocas funciones de JavaScript.
Edición3
@Waqas raja muchas gracias por su ayuda. Ahora puedo ver las imágenes. He eliminado la imagen HTML a ASP: Image Controla y manteniendo ImageUrl como ~/Images/Facebook_icon.png.
Pero todavía no puedo ver los efectos del archivo JS en la página, pongo src = "~/js/jQuery.js" pero todavía no funciona. He colocado el código mencionado por usted en mi clase [justo donde me has guiado].
Solución
El problema es con su ruta de reescritura, reemplácela con lo siguiente
app.Context.RewritePath("~/webnew/Default.aspx", "", "WebId=" + WebId);
Edición 1 Sus requisitos han sido cambiados, sin embargo, permítanme tratar de explicar qué va mal.
El problema debe ser con sus rutas relativas de imágenes y también podría ocurrir en el caso de JavaScript y CSS externos.
Debe usar la ruta en relación con su directorio raíz.
~
se refiere al directorio raíz del directorio virtual cuyo recurso (generalmente se accede a la página o en algún momento CSS externo).
~/pathToImagesFolder/imageName.ext
Debe ser cauteloso al incluir JavaScript y CSS y usar la ruta en relación con el directorio de inicio de su sitio web o directorio virtual. Sin embargo, dentro de CSS no hay que dar un paso a este respecto.
Con respecto a IsPostBack
problema
Supongo que el problema es con su condición if
if (app.Request.RawUrl.ToLower().Contains("/web/"))
Aquí está redirigiendo cualquier solicitud que contenga /web/
En URL y probablemente dentro de su página está accediendo a algunos recursos como imágenes o CSS o JS externos que contienen /web/
En su URL y así, cuando la solicitud alcanza, se está redirigiendo a predeterminada.aspx y el problema plantea. Puedes confirmarlo mirando Request.RawUrl
en Page_Load
evento de Default.aspx
Por lo tanto, necesita más cheques al comparar la ruta de recursos solicitada y la redireccionamiento. Más hermoso, es si revisa y omita la redirección de todas las URL que terminan con las extensiones como .css .jpg .JPG .js .gif
etc.
Espero que sus entendimientos se construyan ahora.
Edición 2 Necesitas omitir todas las otras extensiones
// checking page extension
switch (System.IO.Path.GetExtension(app.Request.Url.AbsoluteUri.ToLower()))
{
case ".bmp":
case ".gif":
case ".jpg":
case ".jpe":
case ".jpeg":
case ".png":
case ".css":
case ".js":
case ".txt":
case ".swf":
// don't redirect, these requests may required in many cases
return;
break;
}