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è 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 -