none
Accedere a RouteData da HttpHandler RRS feed

  • Domanda

  • Ciao a tutti
    Ho un portale multilingua con pagine del tipo:
    {lingua}/{pagina}

    In alcune pagine attraverso jquery accedo a pagine ashx per recuperare dei dati. Alcuni di questi dati devono essere nella lingua indicata da {lingua}.
    Il problema è che anche se ho impostato in precedenza la lingua con:
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(lingua);
    Thread.CurrentThread.CurrentCulture = new CultureInfo(lingua);

    quando vado negli HttpHandler mi ritrovo la lingua di default.
    Come posso accedere a RouteData da un HttpHandler?
    Grazie mille

    martedì 29 dicembre 2015 09:42

Risposte

  • Si,
    ti basta impostare l'url della chiamata ajax con la lingua, così:
    $.ajax({
         url: '/it-IT/hotels.aspx/getLingua',
    Ciao




    Paolo Pranzo

    • Contrassegnato come risposta SviPla lunedì 4 gennaio 2016 08:56
    mercoledì 30 dicembre 2015 12:22

Tutte le risposte

  • Buon pomeriggio Svipla,
    semplicemente con:

    string _lingua = Page.RouteData.Values["lingua"].ToString();
    Ciao


    Paolo Pranzo


    martedì 29 dicembre 2015 13:43
  • Ciao

    non va bene perchè il problema si verifica in una pagina ashx richiamata da un file js con $.ajax

    martedì 29 dicembre 2015 14:41
  • Ciao

    non va bene perchè il problema si verifica in una pagina ashx richiamata da un file js con $.ajax

    Nemmeno così:
    public void ProcessRequest(HttpContext context)
        {
            string _lingua = context.Request.RequestContext.RouteData.Values["lingua"].ToString();
            ...
        }




    Paolo Pranzo

    martedì 29 dicembre 2015 14:48
  • Avevo già provato e restituisce null
    martedì 29 dicembre 2015 15:25
  • A questo punto potresti leggere direttamente la URL e recuperi la lingua come se fosse una directory, così:
    string url = System.Web.HttpContext.Current.Request.ServerVariables["URL"].ToString();
    string lingua = url.Split('/')[1].ToString();

    Ciao


    Paolo Pranzo

    martedì 29 dicembre 2015 15:49
  • Scusami ancora

    Se ho un indirizzo del tipo: http://localhost:52633/en/hotels?q=dfsdfsfsd che viene gestito dalla pagina 'hotels.aspx'

    Come faccio da $.ajax a richiamare una funzione '[WebMethod]' definita in hotels.aspx.cs?

    Ho provato così:

    function getLingua() {
                var lingua = '';
    
                $.ajax({
                    url: '/hotels.aspx/getLingua',
                    data: "{}",
                    cache: false,
                    async: false,
                    dataType: 'json',
                    contentType: "application/json; charset=utf-8",
                    type: 'POST',
                    error: function (request, error) {
                    },
                    success: function (data) {
                        lingua = data.d;
                    }
                });
    
                return lingua;
            }
        }

    ma non va bene perchè System.Web.HttpContext.Current.Request.ServerVariables["URL"] restituisce hotels.aspx e non /en/hotels?q=dfsdfsfsd

    e non riesco anche in questo caso a recuperare la lingua

    martedì 29 dicembre 2015 17:18
  • Qui stiamo facendo un po di confusione.
    Se tramite ajax chiami l'url: /hotels.aspx/getLingua significa che nella pagina hotels.aspx è presente un WebMethod chiamato getLingua.
    Dal codice che hai posto passi al webmethod un parametro con solo due parentesi graffe ({}).
    La ServerVariables URL restituisce giustamente hotels.aspx perché l'url della chiamata ajax è così: /hotels.aspx/getLingua e non così: /en/hotels.aspx/getLingua.
    Dato che utilizzi parametri in QueryString, perché a questo punto non passi anche la lingua (?lingua=en).


    Paolo Pranzo

    martedì 29 dicembre 2015 17:36
  • Ma non è possibile richiamare getLingua con url creata con il routing?

    Quello che non capisco è perchè CultureInfo.CurrentCulture.TwoLetterISOLanguageName mi restituisce sempre 'it-IT' anche se ho impostato 'en-GB' come lingua. Questo accade solo quando richiamo funzioni con $.ajax

    mercoledì 30 dicembre 2015 09:32
  • Si,
    ti basta impostare l'url della chiamata ajax con la lingua, così:
    $.ajax({
         url: '/it-IT/hotels.aspx/getLingua',
    Ciao




    Paolo Pranzo

    • Contrassegnato come risposta SviPla lunedì 4 gennaio 2016 08:56
    mercoledì 30 dicembre 2015 12:22
  • Grazie Paolo
    ho risolto tutto con javascript e espressioni regolari.

    Se puoi, mi spieghi perchè quando utilizzo $.ajax per richiamare funzioni in httphandler o WebMethod perde la lingua?

    Ancora grazie
    lunedì 4 gennaio 2016 08:56
  • Grazie Paolo
    ho risolto tutto con javascript e espressioni regolari.

    Se puoi, mi spieghi perchè quando utilizzo $.ajax per richiamare funzioni in httphandler o WebMethod perde la lingua?

    Ancora grazie
    Se la chiamata ajax la effettui così:

    $.ajax({
         url: '/it-it/hotels.aspx/getLingua',
    non perdi la lingua.
    Probabilmente imposti la lingua già dopo il caricamento della pagina, utilizzando un webmethod prova ad impostare la lingua nell'evento Page_PreInit e vedi che viene impostata correttamente.

    Ciao


    Paolo Pranzo

    lunedì 4 gennaio 2016 14:22