2009-02-13 6 views
1

Je vois une différence dans la sortie d'Url.RouteUrl entre ma machine de développement et mon serveur de déploiement. Je cours Visual Studio 2008 et ma boîte de déploiement est Windows 2003 Server. J'ai configuré le Global.asax.cs à exécuter avec l'extension .aspx dans mes tables de routage. Cependant, lorsque j'utilise la route nommée "Search-Basic", il n'y a pas de sortie Url.RouteUrl ("Search-Basic", nouveau {category = "Test", searchExpression = "rechercher ceci"})Asp.Net MVC Url.RouteUrl Problème sous Windows 2003 par rapport à Visual Studio 2008

Voir code:

<%= Url.RouteUrl("Search-Basic", new {category = "test", searchExpression="search this"}) %> 

Global.asax.cs code:

  // routes for IIS 6 and version below 
     routes.MapRoute(
      "Search-Basic", 
      "Search.aspx/Basic/{category}", 
      new { controller = "Search", action = "Basic", category = "All" } 
      ); 

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

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

Sur ma boîte de développement, je reçois le résultat attendu: /Search.aspx/Basic/Test?searchExpression=search%20this

Cependant, sur mon serveur de déploiement Je n'ai pas de sortie du tout. Une différence peut-être est que j'exécute l'application dans un répertoire virtuel sur mon serveur de déploiement; quelque chose comme: http://testmachine.com/sm/testappname/ où "/ sm" est un répertoire virtuel et "/ testappname" est un répertoire virtuel contenant mon application.

Des idées?

Merci beaucoup.

+0

Phil Hack a un outil sur son blog qui peut vous aider avec le débogage de route http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx – cgreeno

+0

Lorsque j'utilise le débogueur de routage et le type Dans /Search.aspx/Basic, le routage est géré via la route nommée "Search-Basic". Cependant, je reçois toujours

+0

D'accord, ces erreurs peuvent même ne pas être liées à MVC. On dirait que le répertoire virtuel de ma configuration de serveur de développement/sm n'est pas du tout un répertoire virtuel. Ou au moins, il est défini comme un objet IIsConfigObject dans IIS 6. Cela semble être la cause de mes différences dans la sortie d'URL. –

Répondre

1

Exécutez-vous la même version d'ASP.NET MVC, car il existe un bogue dans RC1 (non actualisé) qui provoque cette erreur lorsque vous avez un itinéraire où, par exemple, le contrôleur n'est pas spécifié dans la route:

L'autre régression est que dans certains cas, le RouteUrl (et donc RouteLink) méthodes renvoient une chaîne vide lorsque vous spécifiez un nom d'itinéraire, mais la route a les paramètres par défaut qui ne sont pas des paramètres dans l'URL.

Par exemple, si vous avez la route suivante:

routes.MapRoute("route-name", "foo/bar", new {controller="Home", action="index"});

Notez que le contrôleur a une valeur par défaut , mais ne fait pas partie de l'URL. Si vous spécifiez alors:

<%= Url.RouteUrl("route-name") %>

Vous pourriez vous attendre qu'il utiliserait cette voie pour rendre l'URL, mais il ne fonctionne pas. Ce bug a été introduit quand nous avons refacturé toute notre url générant aides à appeler dans une méthode commune. Il s'avère, cependant, que nos méthodes RouteUrl (aka non-MVC spécifiques) devraient avoir un comportement subtilement différent des méthodes MVC spécifiques (comme Action). Nous avons ajouté un drapeau à la méthode commune de sorte que cette différence est prise en considération . C'était une correction qui n'avait pas une grande surface.

Voir http://haacked.com/archive/2009/01/30/aspnetmvc-refresh.aspx

+0

Je vais demander à mon installateur de vérifier la date sur la signature. Bonne suggestion, pourrait être la cause. En outre, si l'implémentation default.aspx normale est exécutée, j'obtiens un doublement des parties de chemin d'URL, comme testserver.com/sm/testappname/testappname lorsque je lance Html.ActionLink ou Url.RouteUrl. –

+0

Désolé, même avec la nouvelle actualisation RC1, le problème n'a pas été résolu. Je suis toujours en train d'enquêter. Merci pour la suggestion. –

+0

D'accord, ces erreurs peuvent même ne pas être liées à MVC. On dirait que le répertoire virtuel de ma configuration de serveur de développement/sm n'est pas du tout un répertoire virtuel. Ou au moins, il est défini comme un objet IIsConfigObject dans IIS 6. Cela semble être la cause de mes différences dans la sortie d'URL. –

0

D'accord, je crois que je l'ai réduit le problème à une configuration unusal dans IIS 6. J'ai posé une question here.

Les deux suggestions de faire en sorte que je mis à jour au L'actualisation de RC1 et l'utilisation du débogage de routage de Haack m'ont conduit sur cette voie car ils ont tous deux éliminé les problèmes de version et de routage.

Questions connexes