2012-09-11 3 views
0

J'ai développé une application MVC localement (IIS Express) et je l'ai déployée régulièrement vers IIS 7.5 pour tester.New Route ne fonctionne pas sur IIS 7.5

Je venez d'ajouter un nouveau nom à mon dossier Route Global.asax.cs:

 routes.MapRoute(
      "MyCustomRoute", // Route name 
      "{documentID}/{year}", // URL with parameters 
      new { controller = "Documents", action = "CurrentVersion", year = DateTime.Now.Year }, // Parameter defaults 
      new { documentID = @".*\d+.*" } // Regex matches only where documentID contains numerical values. 
     ); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Documents", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

J'ai mis en place un Html.RouteLink en utilisant « MyCustomRoute » et tout fonctionne bien sur ma machine locale. Cependant, lorsque je l'exécute sur le serveur Web, Html.RouteLink génère un lien vide. En outre, si je saisis l'URL directement dans le navigateur, cela donne un 404.

Il semble que la route ne soit pas enregistrée. Qu'est-ce que je rate?

+0

Montrez-nous l'itinéraire. En outre, l'ordre dans lequel vous listerez l'itinéraire est parfois important. Mettez votre nouvel itinéraire avant l'itinéraire par défaut. – user1477388

Répondre

0

Il est impossible pour nous de déboguer votre route sans voir le code, et si vous utilisez les bons outils, il vous sera très facile de voir ce qui se passe et ce qui correspond. Phil Haack a construit un excellent outil open source appelé RouteDebugger. Vous pouvez get it through NuGet et lire sur la façon de l'utiliser au http://haacked.com/archive/2011/04/12/routedebugger-2.aspx. Une version plus robuste de ce projet est disponible en tant que RouteMagic and is at Codeplex et git. Détails à this blog post

MISE À JOUR

Basé sur votre regex, vous êtes documentID n'est pas adaptée en raison de l'avidité. .* correspondra à tout, de sorte que vous aurez jamais l'occasion de correspondre à \d+, car le modèle précédent cannibalise toutes les correspondances. Vous pouvez lire sur la gourmandise regex et la paresse au http://www.regular-expressions.info/repeat.html.

MISE À JOUR 2

Regexes sont probablement la chose dont je suis le pire à la programmation, et la seule raison pour laquelle je reconnaissais cette question est parce que je suis si mal à eux que j'ai rencontré la même question au sujet un million de fois. Cela étant dit, je pense que@"(.*?)(\d+?)(.*?)" fera l'affaire. Cela devrait aussi fonctionner sans aucune des parenthèses (comme @".*?\d+?.*?"), mais j'aime les garder là pour la lisibilité (surtout parce que je suis si méchant avec eux).

+0

Salut, j'ai ajouté mes routes, mais sûrement si cela fonctionne localement alors ce n'est pas un problème avec les routes elles-mêmes? Il semble que ma nouvelle route ne soit pas enregistrée. – James

+0

Quelle est la requête qui échoue? – smartcaveman

+0

@james, Êtes-vous sûr de redéployer l'assembly pour le projet Web après le dernier changement? – smartcaveman

Questions connexes