26 messaggi dal 30 settembre 2006
Per quanto riguarda gli url intendevo che, essendo un sito già pubblico, in altri siti ci sono tutti i link con la tipologia vecchia in querystring:
ViewDetail.aspx?CodAge={AgeImm}&Id={IdImm}
Questo è un problema perchè i link all'interno del sito si riescono a sistemare, ma i link esterni non posso modificarli...

Sarebbe bello se si potesse mettere una regola, dove il routing venga intercettato anche in caso di querystring con una roba del tipo:

routes.Add("ViewDettRoute", new Route
(
"ViewDetail.aspx?CodAge={AgeImm}&Id={IdImm}",
new GestioneRouteHandler("~/ViewDetail.aspx")
));

ma ovviamente va in errore perchè non riconosce dei caratteri.
Quindi per poter fare in modo che anche i vecchi riferimenti sparsi in giro per altri siti scritti in questo modo funzionino:
ViewDetail.aspx?CodAge=XXX&Id=YYY
alla stessa maniera dei nuovi riferimenti:
Immobile/XXX/YYY/{TipoImm}/{ContrImm}/{LocalImm}/dettaglio.aspx

Ho dovuto gestire nella pagina sia i valori di ritorno del routing che le querystring classiche.

Spero di essermi fatta capire...
Ora comunque mi rimane sempre una cosa da sistemare: i percorsi dei javascript...perchè per gli oggetti asp.net il problema si risolve con la tilde, ma per i percorsi di img, javascript, ecc rimane il problema di recuperare la radice del progetto...
ely_bise wrote:
routes.Add("ViewDettRoute", new Route
(
"ViewDetail.aspx?CodAge={AgeImm}&Id={IdImm}",
new GestioneRouteHandler("~/ViewDetail.aspx")
));

tu stai mappando una chiamata sulla stessa pagina, non ha granchè senso. se rimuovi la riga e tieni il vecchio nome di pagina, allora continuerà a funzionare comunque.
ad ogni modo io risolverei con un HttpHandler specifico, mettendo la pagina su un percorso diverso così che non ci siano conflitti. usando "ViewDetail.aspx?{*url}" come pattern, in Url puoi immagazzinare tutto quello che eventualmente viene messo dopo la querystring, così da poterlo intercettare nell'handler ed eventualmente gestirlo per dare un 301 anzichè un 302, così che i motori di ricerca smettano di continuare ad indicizzare i vecchi url e ci sia solo quello "finale". il consiglio è cmq quello di non tenere i doppi Url, ma di spostare gli utenti solo su quello effettivamente valido.

Ora comunque mi rimane sempre una cosa da sistemare: i percorsi dei javascript...perchè per gli oggetti asp.net il problema si risolve con la tilde, ma per i percorsi di img, javascript, ecc rimane il problema di recuperare la radice del progetto...

usa direttamente /. se il tuo progetto va in root, è la cosa più semplice di questo mondo.

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
26 messaggi dal 30 settembre 2006
"il consiglio è cmq quello di non tenere i doppi Url, ma di spostare gli utenti solo su quello effettivamente valido."

condivido, ma purtroppo non posso gestire i link sparsi per chissà quali siti che però devono tornare a trovare tutto correttamente, altrimenti i clienti non saranno molto contenti...

"usa direttamente /. se il tuo progetto va in root, è la cosa più semplice di questo mondo."

Ormai forse sono totalmente rinco...per fare una prova, che tra l'altro avevo già fatto, non mi va in questa maniera, da errore:

<script type="text/javascript" src="<% Response.Write( Server.MapPath("./") ); %>"></script>

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>).


ely_bise wrote:
condivido, ma purtroppo non posso gestire i link sparsi per chissà quali siti che però devono tornare a trovare tutto correttamente, altrimenti i clienti non saranno molto contenti...

e quindi non sono stato chiaro
non ti sto dicendo di non supportare i vecchi URL, ma di fare un redirect quando ci si arriva. di fatto così l'url continua ad essere solo il nuovo, i vecchi rimangono lì per evitare dead link.

Ormai forse sono totalmente rinco...per fare una prova, che tra l'altro avevo già fatto, non mi va in questa maniera, da errore:

non capisco a cosa possa servirti usare Server.MapPath che ti darebbe il percorso fisico del file system del server.
un normale <scrpt src="/mypath.js"></script> non può andare bene?

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
26 messaggi dal 30 settembre 2006
sono un pò in ritardo ma ci sono...
"un normale <scrpt src="/mypath.js"></script> non può andare bene?"
si, funziona!!! sono io che sono rinco...

per farmi del male  sto provando a seguire il tuo consiglio perchè voglio imparare.
Non sono per niente pratica con gli HttpHandler e ci ho sbattuto su un pò la testa in questi giorni.
Sono circa riuscita a buttare su qualcosa, ma non ho capito bene come girare la cosa.
Allora io ho messo sul web.config in httpHandlers:
<add verb="*" path="ViewDetail.aspx" type="HandleRedirect, App_Code" />

Questo intercetta la chiamata anche con querystring e poi nella classe che gestisce l'hendler:

public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
{
if (context.Request.QueryString["CodAge"] != null && context.Request.QueryString["Id"] != null)
{
string AgImm = "", IdImm = "";
string TipoImm = "", ContrattoImm = "", LocalitaImm = "";

AgImm = Convert.ToString(context.Request.QueryString["CodAge"]).Trim();
IdImm = Convert.ToString(context.Request.QueryString["Id"]);

return PageParser.GetCompiledPageInstance("Immobile/" + AgImm + "/" + IdImm + "/dettaglio.aspx", context.Server.MapPath("Immobile/" + AgImm + "/" + IdImm + "/dettaglio.aspx"), context);
}
else
{
return PageParser.GetCompiledPageInstance("Default.aspx", context.Server.MapPath("Default.aspx"), context);
}
}

La mia mente, forse ormai completamente in pappa, pensava a questa logica:
link in querystring -> intercettato dall'heandler qui sopra che passa al link fasullo nuovo -> che viene intercettato dal routing -> arrivo alla pagina finale giusta
Ma mi da "Impossibile trovare la risorsa" perchè il percorso non esiste davvero e quindi non lo trova.
A questo punto mi sembra di non aver molto capito il giro che devo fare...
Anche perchè nel caso base se passo ViewDetail.aspx, mi va nella pagina di Default.aspx ma nell'url rimane scritto ViewDetail.aspx e non è quello che devo ottenere.
Infine è come se dovessi fare un url rewriting al contrario...
Come intendevi tu precisamente il giro per fare una cosa fatta bene?
grazie mille di darmi una mano!
ciao ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.