Pagina Non reindirizzata correttamente, RIVIRICA URL (ASP.NET)
-
28-10-2019 - |
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.
@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].
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;
}