2010-11-03 11 views
1

Je suis confus au sujet des routes MVC. Disons que j'ai ce domaine: poopoopants.com. Je veux des URL standards de la racine qui vont à une page « About » ou « Contact » page:Routes dynamiques ASP.NET MVC

http://poopoopants.com/about 
http://poopoopants.com/contact 

Maintenant, je vais aussi avoir une quantité infinie de ces deux routes ci-dessous, où « [ utilisateur] » est une variable pour le nom d'utilisateur pour une personne inscrite à un compte sur poopoopants.com et chemin fichier [] est un chemin de fichier-sanitize URL qui peut contenir le caractère/:

http://poopoopants.com/[user] 
http://poopoopants.com/[user]/[file-path] 

Donc, je suppose que je l'aurais un IndexController avec une action Index pour /, About un ction pour /about, Contact action pour /contact, et un avec Index action pour /[user]/ et File action pour /[user]/[file-path].

Ma question concerne les itinéraires définis dans Global.asax.cs. Jusqu'à présent, j'ai:

routes.MapRoute("Index", "/", new { controller = "Index", action = "Index" }); 
routes.MapRoute("About", "/about", new { controller = "Index", action = "About" }); 
routes.MapRoute("Contact", "/contact", new { controller = "Index", action = "Contact" }); 

Mais que dois-je préciser pour [utilisateur]/et/[utilisateur]/[fichier-path] routes, et quelles sont les signatures de méthode correspondantes de leurs actions dans UserController ?

Répondre

2

Je ne les ai pas testé, mais il devrait fonctionner:

Routes:

routes.MapRoute(
    "User", 
    "{username}", 
    new { controller = "User", action = "Index" } 
); 

routes.MapRoute(
    "File", 
    "{username}/{filepath}", 
    new { controller = "User", action = "File" } 

signatures Méthode:

public ActionResult Index(string username); 
public ActionResult File(string username, string filepath); 

, vous pouvez également faire votre contrôleur Index Route probablement une clause MapRoute.

outil Usefull: http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

+1

je devais changer le paramètre d'URL pour la route "Fichier" à "{nom d'utilisateur}/{* filepath}" pour soutenir les chemins de fichiers avec '/' en eux, mais qui a travaillé perfectly- -Merci! – SnickersAreMyFave

+0

Hmm, je ne vois pas comment je pourrais avoir une route pour Contact et About, parce que la route User va capturer tout ce qui n'est pas explicitement défini comme un itinéraire, n'est-ce pas? – SnickersAreMyFave

+0

Oui, j'avais tort. Des tests rapides ont prouvé que;) Je suis heureux d'avoir pu aider, bonne chance pour votre projet. – mlusiak