7 messaggi dal 11 maggio 2015
Salve, vorrei applicare la tecnica in oggetto per le pagine statiche.
Come posso fare?
Es. www.miosito.com/contatti.aspx vorrei fosse www.miosito.com/contatti

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Giovanni,
le .aspx sono pagine dinamiche e per riscrivere l'url come hai chiesto è sufficiente installare il pacchetto NuGet "PrettyUrls".

Install-Package Microsoft.AspNet.FriendlyUrls


Qui c'è un articolo che ne descrive l'utilizzo. In pratica: il pacchetto utilizzerà il routing di ASP.NET per consentire l'apertura delle tue pagine anche senza digitarne l'estensione .aspx
http://www.hanselman.com/blog/IntroducingASPNETFriendlyUrlsCleanerURLsEasierRoutingAndMobileViewsForASPNETWebForms.aspx

Se invece vuoi creare delle regole di riscrittura per i file statici come css, js, jpg o html, allora - per default - il routing di ASP.NET non potrebbe essere utilizzato e ti converrebbe forse ricorrere al modulo URL Rewrite di IIS.
Ecco una presentazione del modulo e una panoramica delle regole che puoi creare.
http://www.iis.net/downloads/microsoft/url-rewrite
Il modulo deve essere installato in IIS, assicurati che il tuo hosting provider ce l'abbia o installalo tu stesso se hai l'accesso amministrativo al webserver.

ciao,
Moreno

Enjoy learning and just keep making
7 messaggi dal 11 maggio 2015
Ciao, grazie per l'aiuto ma vorrei sapere se posso effettuare questa operazione usando il file global.asax

Ho provato questa soluzione:

...
void Application_Start(object sender, EventArgs e)
    {        
        // Codice eseguito all'avvio dell'applicazione
        RegistraPercorsi(RouteTable.Routes);
    }

...
 void RegistraPercorsi(RouteCollection routes)
    {
        routes.MapPageRoute("chi-siamo", "chi-siamo", "~/chi-siamo.aspx");        
    }       .....


e nelle pagine aspx ai collegamenti ho inserito ~/chi-siamo

In locale funziona (sarebbe da sistemare) ma online no :(
Dove sbaglio?
E' una soluzione affidabile (ovviamente andrei a registrare tutti i percorsi)?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Giovanni,

giovannivolo921 ha scritto:

online no :(

Indica che versione di IIS hai nel server online. Dovresti verificare se il tuo sito appartiene ad un application pool che gira in modalità classica (anziché integrata, come quando sei sul tuo PC di sviluppo).
In questo caso, prova questa soluzione:
http://stackoverflow.com/questions/7371208/url-routing-is-not-working-in-iis-7-0-witrh-apllication-pool-asp-net-2-0-classic

giovannivolo921 ha scritto:

E' una soluzione affidabile (ovviamente andrei a registrare tutti i percorsi)?

Se riesci a farlo funzionare anche online, non ti mettere a registrare tutti i percorsi. Esiste la libreria FriendlyUrls che ti dà tutto questo gratis, sarebbe un peccato non sfruttarla.

ciao,
Moreno

Enjoy learning and just keep making
7 messaggi dal 11 maggio 2015
Ho risolto grazie al tuo aiuto.
Grazie infinite.
ora sto provando ad applicare il routing sullo stesso sito multilingua e avrei una domanda da farti. posso farla qui o apro una nuova discussione?
11.886 messaggi dal 09 febbraio 2002
Contributi
Sì, se riguarda il routing possiamo continuare qui.

Enjoy learning and just keep making
7 messaggi dal 11 maggio 2015
ok, allora sono passato al livello successivo:
il sito deve essere multilingua quindi nel global ho modificato così:

void RegistraPercorsi(RouteCollection routes)
    {
        routes.MapPageRoute("home", "{lingua}/", "~/default.aspx");
        routes.MapPageRoute("chi-siamo", "{lingua}/{pagina}/", "~/chi-siamo.aspx");        
    }   


e ora non saprei come procedere...
come faccio a impostare la lingua dall'url di caricamento?
(Es. www.miosito.com/en/chi-siamo dovrebbe caricare la pagina in inglese)
avresti qualche guida?
7 messaggi dal 11 maggio 2015
Ho proceduto così:

global.asax

void Application_Start(object sender, EventArgs e)
    {        
        // Codice eseguito all'avvio dell'applicazione
        RegistraPercorsi(RouteTable.Routes);
    }
void RegistraPercorsi(RouteCollection routes)
    {       
        routes.MapPageRoute("home", "{lingua}/", "~/default.aspx");
        routes.MapPageRoute("chi-siamo", "{lingua}/{pagina}/", "~/chi-siamo.aspx", false, null, new RouteValueDictionary { { "lingua", "^(it|en)$" } });        
          
    }   


pagebase.cs

protected override void InitializeCulture()
    {     
        var contesto = HttpContext.Current;
        var routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(contesto));
        if (routeData == null) return;

        contesto.Items["lingua"] = routeData.Values["lingua"];

        var lingua = Context.Items["lingua"] as string;
        switch (lingua)
        {
            case "it":
            case "en":            
                CultureInfo c = new CultureInfo(lingua);
                Thread.CurrentThread.CurrentCulture = c;
                Thread.CurrentThread.CurrentUICulture = c;
                break;
            default:
                
                Response.Redirect("/");
                break;
        }
        base.InitializeCulture();
    }


masterpage

protected void Page_Load(object sender, EventArgs e)
    {     
        string lingua = CultureInfo.CurrentCulture.TwoLetterISOLanguageName;

        hlMenuHome.NavigateUrl = GetRouteUrl("", new RouteValueDictionary { { "lingua", lingua } });
        hlMenuChiSiamo.NavigateUrl = GetRouteUrl("chi-siamo", new RouteValueDictionary { { "lingua", lingua }, {"pagina", "chi-siamo"} });}


In locale sembra che funzioni, ma online mi dice
Impossibile trovare una route denominata 'chi-siamo' nell'insieme di route.
Nome parametro: name

Dove sbaglio?
E' corretto il codice?

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.