93 messaggi dal 30 dicembre 2007
Ciao a tutti,
ho un problema utilizzando l'UrlRouting di Asp.Net.
Vorrei poter creare routes diverse a seconda del terzo livello che può essere differente.
per esempio voglio che
www.miosito.it/ricerca mi fornisca pagina_uno.aspx
estero.miosito.it/ricerca mi fornisca pagina_due.aspx

E' possibile? come?
grazie mille!
Daniele
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,
puoi farlo in due modi. Il primo è un pò più immediato: fai in modo che la tua route punti sempre alla pagina ricerca.aspx (o meglio, un HttpHandler, ricerca.ashx). Da lì, esaminerai il dominio della richiesta (Request.Url.Host) e deciderai se reindirizzare verso pagina_uno.aspx o pagina_due.aspx.

Il secondo modo, forse quello più idoneo, consiste nel fornire dei constraints, cioè dei vincoli di validità, all'aggiunta delle tue routes.

I constraints sono classi che implementano l'interfaccia IRouteConstraint. Creiamo quello che ti consentirà di discriminare in base al dominio.
public class ConstraintDominio : IRouteConstraint
    {
        private readonly string _nomeDominio;

        //quando istanzio questa classe, devo fornire un nome a dominio
        public ConstraintDominio(string nomeDominio)
        {
            _nomeDominio = nomeDominio;
        }
        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            //qui ritorno true o false a seconda che il dominio della
            //richiesta corrente sia lo stesso di quello che ho ricevuto
            //nel costruttore
            return httpContext.Request.Url.Host.Equals(_nomeDominio, StringComparison.CurrentCultureIgnoreCase);
        }
    }
Il routing di Asp.Net invocherà il metodo Match per determinare se la route è valida nel contesto corrente oppure no. Il valore di ritorno true indicherà che la route è valida.

Ora che abbiamo il constraint, usiamolo per aggiungere due routes.
//route per il primo dominio, www.miosito.it
RouteTable.Routes.Add(
new Route("ricerca", new RouteValueDictionary { },
new RouteValueDictionary { {"", new ConstraintDominio("www.miosito.it")} },
new PageRouteHandler("~/pagina_uno.aspx")));

//route per il secondo dominio, estero.miosito.it
RouteTable.Routes.Add(
new Route("ricerca", new RouteValueDictionary { },
new RouteValueDictionary { {"", new ConstraintDominio("estero.miosito.it")} },
new PageRouteHandler("~/pagina_due.aspx")));


ciao

Enjoy learning and just keep making

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.