IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET MVC Discussion :

[MVC3] Custom route handler


Sujet :

ASP.NET MVC

  1. #1
    CUCARACHA
    Invité(e)
    Par défaut [MVC3] Custom route handler
    Salut,

    Je travaille actuellement sur un CustomRouteHandler pour gérer l'URL Friendly.
    Pour se faire, je dois interpréter l'adresse demandée au site et consulter ma base de données pour déterminer à quel contenu l'adresse correspond.

    Etant donné que j'aimerais limiter le nombre d'ouvertures de connexion à la base de données à 1.

    Pour se faire, je peux soit remplir RouteData avec les données qui devront être affichées par la page ou simplement analyser la chaine pour pointer sur differents controleurs en fonction du cas d'utilisation.

    Pour que la première option fonctionne je dois savoir quelle est la taille maxi de route data. J'ai peur que ce soit limité à la longueur d'une requête GET mais je n'arrive pas à trouver l'info.

    Sauriez-vous me dire s'il y a une limitation et si oui, quelle est-elle ?

    D'avance merci

    Laurent

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2007
    Messages : 871
    Points : 1 498
    Points
    1 498
    Par défaut
    Salut,

    Je ne suis pas sur d'avoir bien compris ce que tu veux faire.

    Si j'ai bien compris : pour que mettre en place ta réécriture d'url tu veux passer par le register route et remplacer le comportement par défaut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    routes.MapRoute(
     "Default",                                              // Route name
     "{controller}/{action}/{id}",                           // URL with parameters
      new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
    Par autant de routes que tu as d'url possibles.

    Si c'est cela alors j'ai la réponse (enfin je crois): lorsque tu définit tes routes mvc les ajoutes à une collection cf source de mvc3:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
            [SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings", MessageId = "2#", Justification = "This is not a regular URL as it may contain special routing characters.")]
            public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces) {
                if (routes == null) {
                    throw new ArgumentNullException("routes");
                }
                if (url == null) {
                    throw new ArgumentNullException("url");
                }
     
                Route route = new Route(url, new MvcRouteHandler()) {
                    Defaults = new RouteValueDictionary(defaults),
                    Constraints = new RouteValueDictionary(constraints),
                    DataTokens = new RouteValueDictionary()
                };
     
                if ((namespaces != null) && (namespaces.Length > 0)) {
                    route.DataTokens["Namespaces"] = namespaces;
                }
     
                routes.Add(name, route);
     
                return route;
            }
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class RouteCollection : Collection<RouteBase>
    => du coup tu devrais pouvoir en ajouter un certain nombre ( titre d'infos, pour nos petits besoin, nous avons définis 8 types de routes).

  3. #3
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080

  4. #4
    CUCARACHA
    Invité(e)
    Par défaut
    Salut,

    Merci pour votre participation.

    Pour le filtrage des demandes : clairement non, au contraire, j'accepte toutes les demandes et je les traite à l'intérieur de mon application.

    Je suis parti sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                routes.MapRoute
                (
                    "Default",
                    "{*FriendlyUrl}"
                ).RouteHandler = new FriendlyUrlRouteHandler();
    le FriendlyUrlRouteHandler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
            protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext) 
            {
                var friendlyUrl = (string)requestContext.RouteData.Values["FriendlyUrl"];
                if (string.IsNullOrEmpty(friendlyUrl)){
                    friendlyUrl = "/";
                }
                ContentAccessorModel contentAccessor = friendlyUrl.GetRouteData();
                requestContext.RouteData.Values["friendlyUrl"] = contentAccessor.FriendlyUrl;
                requestContext.RouteData.Values["controller"] = contentAccessor.Controller;
                requestContext.RouteData.Values["action"] = contentAccessor.Action;
                requestContext.RouteData.Values["language"] = contentAccessor.Language;
                requestContext.RouteData.Values["id"] = contentAccessor.Id;
                requestContext.RouteData.Values["structureElementType"] = contentAccessor.StructureElementType;
                requestContext.HttpContext.RewritePath(friendlyUrl);
                //Réécriture de l'url pour qu'elle s'affiche telle que demandée
                requestContext.HttpContext.RewritePath(friendlyUrl);
                return base.GetHttpHandler(requestContext);
            }
    Le problème est que je dois accéder à la base dans friendlyUrl.GetRouteData();

    Puis accéder à nouveau à la base pour que le controleur puisse remplir le reste de la page.

    En fait, j'aurais aimé passé un requestContext.RouteData.Values["Content"]

    De sorte qu'une seule connexion à la base suffise pour rapparier le contenu dans la page.

    Le souci est que j'ai peur que les paramètres de routedata soient passés en get et donc limités en taille auquel cas ca pourrait tronquer mon contenu.

    C'est plus clair ?

    Encore merci pour votre aide

    ++

    Laurent

  5. #5
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 080
    Points
    8 080
    Par défaut
    Ben fallait lire l'article en entier. Dedans y'a marqué qu'une url est limité 2048 carctères et une query string a 1024

  6. #6
    CUCARACHA
    Invité(e)
    Par défaut
    Salut,

    Désolé, j'avoue ne l'avoir que survolé

    Merci pour l'info

    ++

    Laurent

Discussions similaires

  1. [2.x] Custom route loader : erreur importation
    Par pypyy dans le forum Symfony
    Réponses: 0
    Dernier message: 04/10/2013, 15h54
  2. Réponses: 0
    Dernier message: 09/05/2012, 10h17
  3. [Débutant] [MVC3] Navigation / routes
    Par dkmix dans le forum ASP.NET MVC
    Réponses: 0
    Dernier message: 19/04/2012, 21h22
  4. Réponses: 7
    Dernier message: 30/01/2012, 09h16
  5. [C#] suppression handler sur ImageButton
    Par jld33 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 07/01/2004, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo