Domanda

Sto lavorando alla riscrittura dell'URL e ho trovato un tutorial sul sito ASP.NET, come lo sto facendo

URL sto entrando http: // localhost: 1573/webnew/web/firstweb

Ora ho una classe wriiten

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);

    }
}

Ma il problema è che non si sta reindirizzando alla pagina predefinita.aspx.

Sto ricevendo l'errore di seguito:

Descrizione: HTTP 404. La risorsa che stai cercando (o una delle sue dipendenze) avrebbe potuto essere rimossa, se il nome è cambiato o temporaneamente non disponibile. Si prega di rivedere il seguente URL e assicurarsi che sia scritto correttamente.

URL richiesto: /webnew/web/default.aspx

Vedo che sta richiedendo l'URL /webnew/web/default.aspx ma ho solo bisogno di /webnew/default.aspx

Per favore aiutami

MODIFICARE

Grazie per la risposta, ma non sono in grado di accettare la tua risposta né il pulsante di commento funziona per me, questo è il motivo per cui sto modificando il mio post. Ricevo un errore JavaScript: oggetto previsto e la domanda dell'oggetto è nulla.enter image description here

@Waqas raja grazie per la tua risposta, ora funziona bene. Ma quando ho messo il punto di interruzione in (! ISpostback) evento di impostazione predefinita.aspx, posso vedere che sta arrivando aroung 8 volte. Dopo aver caricato la pagina poche immagini sono sparite. È il problema multiplo di aggiornamento? Qualche idea sul motivo per cui sta andando ancora e ancora all'evento If (! Ispostback). Grazie per l'aiuto

EDIT1

@Waqas raja accetterò la risposta dopo l'accesso dal browser diverso.

EDIT2

@Waqas raja sto mostrando l'immagine sulla mia home page in questo modo

Ci sono altre poche immagini che vengono visualizzate anche in questo modo, tutte arrivano correttamente quando si caricano normalmente, ma quando uso la riscrittura URL posso vedere solo il testo ALT.

Ho provato anche questo

ma stesso risultato. :-( qualche suggerimento?

Controllando l'URL grezzo posso vedere che ci sono molte richieste diverse dalla pagina, cioè jpg, .js proprio come hai detto. Ho aggiornato il codice, è corretto? Perché non sono in grado di vedere immagini e poche funzioni JavaScript.

EDIT3

@Waqas Raja Grazie mille per la tua assistenza. Ora posso vedere le immagini. Ho rimosso l'immagine HTML in ASP: Image ControlA e mantenendo ImageUrl come ~/Images/Facebook_icon.png.

Ma non riesco ancora a vedere gli effetti del file JS sulla pagina, metto src = "~/js/jquery.js" ma non funziona ancora. Ho messo il codice da te menzionato nella mia classe [proprio dove mi hai guidato].

È stato utile?

Soluzione

Il problema è con il percorso di riscrittura, sostituiscilo con quanto segue

app.Context.RewritePath("~/webnew/Default.aspx", "", "WebId=" + WebId);

EDIT 1 Le tue esigenze sono state cambiate, tuttavia lasciami provare a spiegare cosa non va.

Il problema deve essere con i tuoi percorsi relativi di immagini e potrebbe anche verificarsi in caso di Javascript e CSS esterni.

Dovresti usare il percorso relativo alla directory principale.

~ Si riferisce alla directory root della directory virtuale la cui risorsa (di solito page o a volte CSS esterna) si accede.

~/pathToImagesFolder/imageName.ext

Dovresti essere cauto quando includi JavaScript e CSS e usa il percorso rispetto alla home directory del tuo sito Web o directory virtuale. Tuttavia, all'interno di CSS non è necessario fare alcun passo al riguardo.

Per quanto riguarda IsPostBack problema

Immagino che il problema sia con la tua condizione IF

if (app.Request.RawUrl.ToLower().Contains("/web/"))

Qui stai reindirizzando qualsiasi richiesta che contiene /web/ In URL e molto probabilmente all'interno della tua pagina stai accedendo ad alcune risorse come immagini o CS o JS esterni che contiene /web/ Nel loro URL e quindi quando la richiesta raggiunge viene reindirizzata a Default.aspx e il problema solleva. Puoi confermarlo guardando Request.RawUrl in Page_Load evento di Default.aspx

Quindi, hai bisogno di ulteriori controlli quando si confrontano il percorso delle risorse richiesto e il reindirizzamento. Più bello se controlli e salti reindirizzamento di tutti gli URL che termina con le estensioni come .css .jpg .JPG .js .gif eccetera

Spero che le tue comprensioni si costruiscano ora.

EDIT 2 Devi saltare tutte le altre estensioni

// 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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top