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.enter image description here

@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].

¿Fue útil?

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top