2017-06-01 1 views
1

J'ai donc l'application ASP.NET MVC. Je voudrais configurer ses routes. Voici le code de mon RouteConfig:Contraintes dans l'itinéraire

public static void Register(RouteCollection routes, bool useAttributes = true) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
    routes.IgnoreRoute("favicon.ico");  

    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

Cette route fonctionne très bien. En plus, j'ai une zone dans mon application et j'essaye de configurer ses routes aussi. Il est mon code d'enregistrement de la zone:

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    try 
    {               
     context.MapRoute(
      name: "SiteSettings_Controller", 
      url: "SiteSettings/{controller}/{action}/{id}", 
      defaults: new {action = "Index", id = UrlParameter.Optional, 
      // here I tried to use @"(UserManagement|Tools|Settings)" 
      //as constraint but it takes no effect 
      constraints: new {controller = "UserManagement|Tools|Settings" } 
     );        
    } 
    catch (Exception e) 
    { 
     // here I get InvalidOperationException "" 
    }   
} 

Je voudrais limiter les contrôleurs dans la route de SiteSettingsArea mais quand je vais à « localhost/SiteSettings/UserManagemeNT » url Je reçois InvalidOperationException avec le message « Pas de route dans la table de routage correspond à la valeurs fournies ". Je crois que cette URL correspond à la route SiteSettings_Controller mais évidemment je me trompe. Comment pourrais-je limiter les contrôleurs sur la route correctement?

Répondre

0

Si vous recherchez votre code pour SiteSettings_Controller est-ce qu'il apparaît ailleurs?

Le code ci-dessous a certainement fonctionné pour moi lorsque je l'ai testé.

using System; 
using System.Web.Mvc; 

namespace WebApplication1.Areas.SiteSettings 
{ 
    public class SiteSettingsAreaRegistration : AreaRegistration 
    { 
     public override string AreaName 
     { 
      get 
      { 
       return "SiteSettings"; 
      } 
     } 

     public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       name: "SiteSettings_Controller", 
       url: "SiteSettings/{controller}/{action}/{id}", 
       defaults: new 
       { 
        action = "Index", 
        id = UrlParameter.Optional 
       }, 
      constraints: new { controller = "UserManagement|Tools|Settings" } 
      ); 
     } 
    } 
}