64 messaggi dal 16 novembre 2009
Ciao a tutti, ho realizzato una semplice pagina che a seconda della lingua di default del browser chiama RedirectToAction... il tutto funziona perfettamente, oggi ho provato a verificare se il sito fosse visibile ai vari crawler tramite i noti servizi online, ma tutti mi restituiscono Error code: 500, quindi deduco che googlebot ed affini non riescano ad indicizzare il sito? Come posso risolvere?
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,
fai vedere il codice che usi per effettuare la ridirezione. Non è che per caso viene sollevata una NullReferenceException se manca l'intestazione Accept-Language? L'errore 500 purtroppo non ci dice nulla, è un generico errore server. Dovresti fare l'override del metodo OnException del controller e loggare l'eccezione su file, così vedresti l'esatta riga che sta causando il problema.

ciao,
Moreno

Enjoy learning and just keep making
64 messaggi dal 16 novembre 2009
Questo è il codice nel global.asax

protected void Application_AcquireRequestState(object sender, EventArgs e)
        {

            HttpContextBase currentContext = new HttpContextWrapper(HttpContext.Current);
            RouteData routeData = RouteTable.Routes.GetRouteData(currentContext);

            if (routeData.Values["lang"] != null )
            {

                if (Utility.AvailableLanguage(routeData.Values["lang"].ToString()))
                {
                    Session["Culture"] = new CultureInfo(Server.HtmlEncode(routeData.Values["lang"].ToString()));
                }
                else
                {

                    if (Request.UserLanguages.Count() > 0)
                    {
                        Session["Culture"] = new CultureInfo(Request.UserLanguages[0]);
                    }
                    else
                    {
                        Session["Culture"] = new CultureInfo(Server.HtmlEncode("it"));
                    }
                    
                    //Session["Culture"] = new CultureInfo(Request.UserLanguages[0]);

                    //Session["Culture"] = new CultureInfo(Server.HtmlEncode("it"));
                }


            }
            else
            {

                if (Request.UserLanguages.Count() > 0)
                {
                    Session["Culture"] = new CultureInfo(Request.UserLanguages[0]);
                }
                else
                {
                    Session["Culture"] = new CultureInfo(Server.HtmlEncode("it"));
                }

            }



            if (HttpContext.Current.Session != null)
            {

                CultureInfo ci = (CultureInfo)this.Session["Culture"];

                if (ci == null)
                {
                    string langName = "it";

                    if (HttpContext.Current.Request.UserLanguages != null && HttpContext.Current.Request.UserLanguages.Length != 0)
                    {
                        
                        langName = HttpContext.Current.Request.UserLanguages[0].Substring(0, 2);

                    }

                    ci = new CultureInfo(langName);
                    this.Session["Culture"] = ci;

                }

                Thread.CurrentThread.CurrentUICulture = ci;
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);

            }


            
           
        }


E questo è nel controller

if (string.IsNullOrEmpty(pageName))
            {

                string TWOISOLANGUAGE = Request.UserLanguages[0].Substring(0, 2);

              
                return RedirectToAction("Index", "page", new { lang = TWOISOLANGUAGE, pageName = "home" });


            }
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao Cristian,

nel Controller, verifica che il conto delle UserLanguages sia maggiore di zero prima di accedere alla collezione. E' la stessa cosa che fai già nel global.asax.
if (string.IsNullOrEmpty(pageName) && Request.UserLanguages.Count() > 0) {
  string TWOISOLANGUAGE = Request.UserLanguages[0].Substring(0, 2);
  return RedirectToAction("Index", "page", new { lang = TWOISOLANGUAGE, pageName = "home" });
}

...ma non so dire con esattezza se sia quella la causa del problema. Come ti ripeto, dovresti gestire l'eccezione o a livello del Controller, facendo l'override di OnException, oppure a livello di applicazione, come vedi fare qui:
http://msdn.microsoft.com/en-us/library/24395wz3(v=vs.100).aspx
Solo in questo modo potrai capire qual è la riga di codice che sta generando l'errore.

Altra cosa: anziché assegnare la CultureInfo ad una variabile di Sessione, sarebbe più opportuno assegnala al thread corrente, così potrebbero beneficiarne anche gli HttpHandlers, che normalmente non prevedono variabili di sessione, o ASP.NET stesso, che così potrà caricare gli opportuni satellite assemblies delle risorse.
//Da eseguire preferibilmente nell'Application_BeginRequest
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;


ciao,
Moreno

Enjoy learning and just keep making
64 messaggi dal 16 novembre 2009
Scusate il ritardo ho risolto solo ora... Il fatto è che i crawler non hanno un "lingua predefinita" quindi va controllato all'inizio se il client che si connette è un browser o u crawler semplicemente aggiungendo questo

if (Request.UserLanguages != null)


Non so se sia una soluzione ad hoc ma funziona! Grazie mille per l'aiuto!!

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.