2011-01-03 3 views
2

J'ai un problème intéressant qui semble m'échapper.Routes Mono asp.net MVC2 fonctionnant sous windows .net-4.0 mais pas en mono-2.8

Le fichier xsp4 de Mono semble uniquement appliquer la première route pour toutes les demandes.

Ce travail sur les fenêtres:

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 



    routes.MapRoute(
     "Identities", 
     "{identity}", 
     new { controller = "Identity", action = "Index" } 
     ); 

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

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

Ainsi lors de la demande/thomasvjames &/Accueil/A propos des fenêtres tout fonctionne normalement, mais lors de la demande/Accueil/A propos de mono xsp4 mappe toujours à la route « Identités » et le paramètre d'identité est défini sur "Accueil".

Est-ce que j'ai découvert un bug mono (j'espère qu'il existe) ou est-ce que je peux réorganiser mes itinéraires pour que cela fonctionne pour les deux plates-formes?

J'ai également essayé une route d'identité de type fourre-tout avec une contrainte, mais je n'ai pas réussi à obtenir cela en mono aussi. [Édité: La réponse] Donc, la réponse à cette question était, mise à niveau vers la dernière version disponible de mono. Je n'utilisais pas une construction assez récente de 2.8 (oct) quand j'ai eu besoin de la construction nov.

Problème résolu, le ci-dessous fonctionne comme prévu.

+0

Rechercher si quelque chose existe déjà ici, http://www.mono-project.com/Bugs –

Répondre

1

Le livre MVC que j'ai indiqué indique que l'approche correcte consiste à mettre PLUS d'entrées spécifiques avant les entrées spécifiques MOINS, donc selon que votre commande est erronée. La raison donnée pour cela est exactement ce que vous avez décrit: Il traverse la liste dans l'ordre et trouve la première entrée qui correspond.

Avec ces changements de votre table de routage doit être: `

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

    routes.MapRoute(
    "Identities", 
    "{identity}", 
    new { controller = "Identity", action = "Index" } 
    ); 

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

Merci, mais qui était mon routage d'origine. Avec cela, chaque page était "Home/Index" et elle avait essentiellement le même problème. J'ai déplacé les "Routes Statiques" à la fin de sorte qu'il a été ignoré. –

+0

On dirait que vous avez trouvé un bug. Peut-être qu'il y a un correctif disponible ou vous pouvez en soumettre un si vous pouvez résoudre le problème en Mono. – Brian

Questions connexes