2016-12-14 2 views
0

Je rencontre un problème avec le routage et les zones, comme l'indique le titre. J'ai une section sur les zones dans mon projet qui a juste un domaine. Il a un contrôleur de la politique là-bas. En dehors du projet, il y a un dossier de contrôleur avec un LoginController. Lorsque j'essaie d'accéder à l'URL "BoB/Login/ChangeSection" (BoB est le nom du projet, Login is controller, ChangeSection est une action), il est envoyé à "BoB/Policy/Login". Cela signifie que l'enregistrement de zone dans la zone de stratégie saisit la requête et met le préfixe de police en avant alors qu'il ne devrait pas l'être.Problème de routage avec les zones

Voici mon projet RouteConfig

routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "BoBHome", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new string[] { "BoB.Controllers" } 
      ); 

et voici l'enregistrement de la région

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      name: "BoBPolicy_default", 
      url: "Policy/{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, 
      namespaces: new string[] { "BoB.Areas.BoBPolicy.Controllers" } 
     ); 
    } 

J'avais l'impression que les namespaces garderaient que cela se produise, mais il est évidemment pas. Toute aide est appréciée.

Quelques infos supplémentaires:

Cela vient d'un autre projet qui n'est pas MVC de sorte que le Redirect ressemble à ceci:

Response.Redirect("/BoB/BoBLogin/ChangeSection?controller=PolicyOverview"); 

Répondre

1

Je pense que votre question est similaire à non area route issue, ce qui nécessite l'utilisation du paramètre de zone pour empêcher le préfixe de l'URL de la zone insérée lors de l'utilisation route par défaut:

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    // set area parameter with area name 
    context.MapRoute(
     name: "BoBPolicy_default", 
     url: "Policy/{controller}/{action}/{id}", 
     // add area parameter here 
     defaults: new { area = "Policy", controller = "Home", action = "Index", id = UrlParameter.Optional }, 
     namespaces: new string[] { "BoB.Areas.BoBPolicy.Controllers" } 
    ); 
} 

NB: Depuis l'enregistrement de l'itinéraire de la zone toujours placé au-dessus de def ault route (lire this answer pour des raisons derrière cela), il est possible que le moteur de routage ramasse incorrectement la demande de route par défaut dans la route de zone quand la (les) contrainte (s) de route de zone n'est pas spécifiée.

connexes:

MVC5 Routing Go to specific Areas view when root url of site is entered