2009-08-20 6 views
0

La plupart de nos projets sont à court terme et de nature promotionnelle. En conséquence, nos clients veulent souvent mettre en place une sorte de "fin de programme" ou "expiré" page lorsque la promotion est terminée. Comment faire une redirection globale de toutes les actions du contrôleur vers une action de contrôleur spécifique sans modifier chaque contrôleur et ses méthodes? Est-ce seulement possible?Redirection globale ASP.NET MVC

Idéalement, en pseudocode, je voudrais être en mesure de faire quelque chose comme ceci:

// somewhere in global.asax 
if (current_action_url != desired_action_url) 
    redirect to desired_action_url 

J'ai essayé de faire simple, correspondant de la chaîne sur l'URL:

if (!Request.Url.AbsolutePath.ToLower().EndsWith("path/to/desired/page")) 
    Response.Redirect("path/to/desired/page"); 

Cependant, depuis que je J'utilise toujours IE 6 et je dois utiliser le hack générique, IE redirigeait toutes les requêtes vers la page (même les images et les feuilles de style) ce qui gâche assez mal les choses.

Répondre

0

Comment utiliser les routes? Définir les routes qui sont pour toutes les promotions valides, le fourre-tout peut aller au générique « promo expiré » Page

 routes.MapRoute(
       "PromoStillGoing", 
       "path/to/PromoStillGoing/{action}", 
       new { controller = "PromoStillGoing", action = "Index" }); 

     routes.MapRoute("Catch All", "{*path}", new { controller = "ExpiredPromos", action = "Index" }); 

La volonté ci-dessus ne une page pour tous les codes promos expirés, pas sûr de votre question si c'est ce que vous voulez .

Si vous voulez avoir une page expirés par promo, puis dans les itinéraires que vous pouvez « ignorer » l'action dans l'URL demandée comme

 routes.MapRoute(
       "ExpiredPromoName", 
       "path/to/PromoName/", 
       new { controller = "PromoName", action = "Index" }); 

Maintenant, quoi que ce soit sous/chemin/vers/PromoName utilisera la Action d'index du PromoNameController

+0

Je pense que la partie "{* path}" était la pièce manquante. Je vais essayer demain et vous poser la question si cela fonctionne. Merci! – Chris

Questions connexes