2009-04-07 11 views
7

Je tente d'écrire un clone de type TinyURL dans ASP.NET MVC en tant que premier projet pour m'habituer au framework.TinyURL aime le routage avec ASP.NET MVC?

Le routage d'URL est toujours un peu confus pour moi, surtout quand je dévier du contrôleur/action/id. Est-ce que l'un de vos ninjas ASP.NET MVC peut m'aider à configurer une route d'URL simple similaire à la façon dont TinyURL.com traite ses routes?

Par exemple:

www.tinyurl.com/

redirigée sur la page d'index. Donc, si aucun paramètre n'est passé, alors appelez simplement la vue Index(). Cependant, si vous transmettez votre hash tinyurl, j'ai besoin d'appeler l'action redirect().

www.tinyurl.com/fbc13

Alors, comment pourrais-je aller sur la configuration de cet itinéraire personnalisé?

routes.MapRoute( 
       "Default",        // Route name 
       "{tinyhash}",       // URL with parameters 
       new { controller = "Link", action = "ReDirect", tinyhash = "" } // Parameter defaults 
      ); 

Ce n'est pas tout à fait raison, parce que si vous venez de visiter la page sans hachage dans l'url, je l'ai en défaut à l'action redirect() quand je veux à la place, appelez l'indice() méthode.

Suggestions pour imiter une route de base de type TinyURL?

Répondre

12

Vous êtes sur la bonne voie. Créez un itinéraire vide et vous ne serez pas redirigé.

routes.MapRoute( 
    "Default", 
    "", 
    new { controller = "Home", action = "Index" } 
); 

et changer votre par défaut à

routes.MapRoute( 
    "Redirect", 
    "{tinyhash}", 
    new { controller = "Link", action = "ReDirect", tinyhash = "" } 
); 

Sinon, vous pourriez avoir juste le contrôleur vérifier la valeur tinyhash et un affichage différent si elle est vide. (C'est hacky)

+0

@benrick, merci beaucoup! – KingNestor