2010-10-19 9 views
1

J'ai trois contrôleurs, Home, Blog et Misc.Comment MapRoute? Si http://abc.com/Home allez à Home Controller sinon allez à Misc Controller

Lorsque je tape mydomain.com/Home dans la barre d'adresse, le navigateur affiche la vue pour le contrôleur domestique.

Lorsque je tape mydomain.com/Blog dans la barre d'adresse, le navigateur affiche la vue pour le contrôleur de blog.

Et quand je tape mydomain.com/anything (pas Home ni Blog) le navigateur affiche la vue pour le contrôleur misc.

Comment mapper l'itinéraire ci-dessus?

Je veux dire que lorsque le type autre chose que/home ou/Blog
par exemple/Test,/Livre,/Livre/Index/xxx/yyy/zzz/aaa,/etc/etc/etc,
alors mon Misc Controller sera lancé

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


routes.MapRoute(
    "Misc", 
    "{*id}", 
     new { controller = "Misc", action = "Index", id = "" }, 
; 
+0

Pouvez-vous ** nous montrer ** vos itinéraires ??? Comment les définissez-vous dans le code ??? Et que voulez-vous exactement lorsque vous tapez autre chose que/Home ou/Blog ?? –

Répondre

0

afin de piéger les « autres » entrées, vous devez remplacer l'usine de contrôleur qui détermine le contrôleur à utiliser:

protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) 
{ 
    try 
    { 
     return base.GetControllerInstance(requestContext, controllerType); 
    } 

    catch (HttpException ex) 
    { 
     int httpCode = ex.GetHttpCode(); 
     if(httpCode == (int)HttpStatusCode.NotFound) 
     { 
      IController controller = new MiscController(); 
      ((MiscController)controller).DefaultAction(); // whatever action you want to invoke 
      return controller; 
     } 
     else 
     { 
      throw ex; 
     } 
    } 
} 

alors inscrivez-vous cette usine de contrôleur je n le démarrage Global.asax.