75 messaggi dal 08 agosto 2003
La necessità è di migliorare l'aspetto SEO modificando le URLs di un eCommerce esistente sviluppato in ASP.Net 3.5 aggiornato al 4.0, documentandomi ho notato che è stato rilasciato ormai da un pò il namespace System.Web.Routing per webforms solo per la versione 4.0 del framework essendo una funzionalità nativa di MVC quindi mi cimento subito nell'implementazione del Routing che devo dire leggendo la documentazione sembra facile (per chi fosse interessato la aggiungo qui) http://msdn.microsoft.com/en-us/library/cc668201.aspx#adding_routes_to_a_web_forms_application aggiungo subito il riferimento al progetto del nuovo namespace e inizio dalla pagina home.aspx a lavorare su un link per testare il funzionamento, quindi procedo:
<a href="cerca/scarpe/" title="" > <img  class="BorderHyperLinkImmagine"  src="img/b5.jpg" alt="" /></a>
poi proseguo nel global.asax con
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
      Me.RegisterRoutes(RouteTable.Routes)
End Sub

Sub RegisterRoutes(ByVal routeCollection As RouteCollection)
        routeCollection.Ignore("{resource}.css/{*pathInfo}")
    routeCollection.Ignore("{resource}.axd/{*pathInfo}")

    routeCollection.MapPageRoute("NomeRoute", "cerca/{tipologia}/", "~/cerca-tiplogia.aspx")
End Sub
All'interno della pagina cerca-tipologia anzich&egrave; utilizzare il classico codice
Request.QueryString("tipologia")
utilizzo invece
 Dim sTipologia As String = CType(Page.RouteData.Values("tipologia"), String)
        sQueryStringTipologia = sTipologia
Arrivo al dunque tutto funziona e me ne accorgo dal fatto che quando punto con il mouse sul link ottengo ciò che mi aspettavo ossia un'url virtuale riscritta del tipo http://www.miosito.it/cerca/scarpe/ quando faccio click mi redireziona sul link reale e non su quello virtuale anche questo è corretto visualizzandomi nella barra l'URL virtuale, perfetto. Però con un "piccolo difetto" ossia ottengo una pagina bianca piena di contenuti ma non formattati, praticamente il routing mi ha aggiunto "cerca/scarpe" anche ai link dei file fissi che ho nel mio sito per intenderci questo
http://www.miosito.it/cerca/scarpe/mioStile.css 
anzichè
http://www.miosito.it/mioStile.css
stesso problema per tutti i file .js, .jpg e .axd in questo la documentazione parla chiaro basterà far ignorare nel global.asax tutti i file con quelle estensioni con il codice che vedete sopra e che riscrivo qui per chiarezza
 routeCollection.Ignore("{resource}.css/{*pathInfo}")
    routeCollection.Ignore("{resource}.axd/{*pathInfo}")
tutto ciò dovrebbe funzionare senza dover far alcuna modifica al href dell'include dei file css,js etc... quindi lascio invariato in questo modo
<link rel="stylesheet" href="mioStile.css"  type="text/css" media="screen" />
qualcuno può spiegarmi perchè non funziona ho un modo per carpire come mai il routing non ignora i file con estensione .css mentre invece funziona solo per i file axd. Gli errori 404 compaiono nella console del dev tool di Chrome. Spero di non essere stato troppo prolisso. Grazie a tutti Francesco
Modificato da Francesco1982 il 16 gennaio 2014 22.58 -
Modificato da Francesco1982 il 16 gennaio 2014 22.58 -
Modificato da Francesco1982 il 16 gennaio 2014 22.59 -

MODIFICA 1:
Altro codice che ho provato ad inserire nel global.asax all'interno del metodo RegisterRoutes() prima di aggiungere MapPageRoute()
routeCollection.Ignore("{file}.css")
ho anche provato ad escludere la cartella che contiene tutti i file CSS in questo modo
routeCollection.Ignore("{folder}/{*pathInfo}", New With {.folder = "css"})
vorrei aggiungere un altra inforomazione nel web config non ho aggiunto
 <modules runAllManagedModulesForAllRequests="true" />
poichè sto lavorando su windows 8.1 con la versione 8.5 di IIS, so che questa direttiva andrebbe aggiunta solo per la versione 7.0 di IIS. Ad ogni modo continuo ad ottenere gli errori 404.
Modificato da Francesco1982 il 17 gennaio 2014 08.10 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Francesco,

Francesco1982 ha scrito:

il routing mi ha aggiunto "cerca/scarpe"
No, il routing non ha modificato in alcun modo i tuoi link a file statici, né li gestisce. Infatti, se esamini il codice HTML del pagina, noterai che il link al file CSS continua a presentarsi così, proprio come quando non avevi ancora introdotto il routing.
<link rel="stylesheet" href="mioStile.css"  type="text/css" media="screen" />

Il percorso "mioStile.css" è un tipo di percorso relativo, quindi il browser cercherà quel file nella cartella della pagina corrente. Dato che l'url della tua pagina è diventato ora "/cerca/scarpe/", il file mioStile.css verrà cercato in quella cartella.

Devi semplicemente usare un URL assoluto anziché uno relativo. Indica il percorso dalla root del sito.
<link rel="stylesheet" href="/mioStile.css"  type="text/css" media="screen" />

Così, avendo anteposto lo slash /, il file mioStile.css verrà cercato sempre nella root, indipendentemente da quale sia il percorso della pagina corrente.

Oppure, meglio, parti dalla root dell'applicazione
<link rel="stylesheet" href="~/mioStile.css"  type="text/css" media="screen" />


Francesco1982 ha scritto:

MODIFICA 1:
Altro codice che ho provato ad inserire nel global.asax

Questo non serve, puoi farne a meno.

ciao,
Moreno
Modificato da BrightSoul il 18 gennaio 2014 15.24 -

Enjoy learning and just keep making
75 messaggi dal 08 agosto 2003
Ciao Moreno,

grazie sempre gentile,
il mio dubbio ora è chiarito però devo evidenziare un'anomalia

se uso il codice che mi hai suggerito

ossia href="~/MioStile.css" nel dev tool di chrome continua a darmi errore 404 perchè il link è così composto:

http://miosito.com/cerca/scarpe/~/MioStile.css

affinando la ricerca in base a ciò che mi hai detto ho trovato la soluzione però non mi è chiaro il motivo, mi spiego, ho utilizzato il seguente codice:

<link rel="stylesheet" href="<%= Page.ResolveUrl("~/MioStile.css")%>"  type="text/css" media="screen" />


In questo modo funziona, leggendo l'msdn dice che il metodo ResolveUrl ritorna lo stesso path se il link passato è assoluto come nel nostro caso, sbaglio? Sta di fatto che così funziona.

Grazie infinite
Francesco
Modificato da Francesco1982 il 18 gennaio 2014 16.17 -
Modificato da Francesco1982 il 18 gennaio 2014 16.18 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Francesco,


ResolveUrl ritorna lo stesso path se il link passato è assoluto come nel nostro caso

Non sempre, dipende dove è stata pubblicata l'applicazione web.
Dentro IIS, puoi scegliere di pubblicarla nella root di un sito oppure in una sua sottocartella aggiunta come applicazione (vedi questa immagine).

Se si usa lo slash, si parte sempre dalla root del sito e questo può essere un problema se lo sviluppatore non ha idea se la sua applicazione verrà pubblicata nella root di un sito o in una sua applicazione.

Usare ResolveUrl su un percorso che inizia con ~/, invece ti dà la garanzia che il percorso sarà sempre corretto, perché ASP.NET lo calcola tenendo conto del punto in cui l'applicazione è stata pubblicata.

Se è stata pubblicata nella root, allora sì, ResolveUrl("~/") restituirebbe /. Se invece è stata pubblicata come applicazione, allora restituirà correttamente /nomeapplicazione.

Francesco1982 ha scritto:

se uso il codice che mi hai suggerito
ossia href="~/MioStile.css" nel dev tool di chrome continua a darmi errore 404 perchè il link è così composto:
http://miosito.com/cerca/scarpe/~/MioStile.css

Già, hai ragione, dimenticavo che sei su WebForms. Quello funziona solo su view Razor, da MVC4 in poi.
Hai fatto bene ad usare Page.ResolveUrl.

ciao,
Moreno
Modificato da BrightSoul il 18 gennaio 2014 16.42 -

Enjoy learning and just keep making
75 messaggi dal 08 agosto 2003
adesso non ho più dubbi,

grazie ancora
Francesco

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.