web-dev-qa-db-fra.com

Redirection avec ASP.NET MVC MapRoute

Sur mon site, j'ai déplacé des images d'un dossier à un autre.

Maintenant, lorsque je reçois une demande d'anciennes images '/ old_folder/images/*', je souhaite effectuer une redirection permanente vers un nouveau dossier contenant ces images '/ new_folder/images/*'

Par exemple: 

/old_folder/images/image1.png => /new_folder/images/image1.png

/old_folder/images/image2.jpg => /new_folder/images/image2.jpg

J'ai ajouté un contrôleur de redirection simple

public class RedirectController : Controller
{
    public ActionResult Index(string path)
    {
        return RedirectPermanent(path);
    }
}

Maintenant, je dois configurer le bon routage, mais je ne sais pas comment passer la partie path au paramètre path.

routes.MapRoute("ImagesFix", "/old_folder/images/{*pathInfo}", new { controller = "Redirect", action = "Index", path="/upload/images/????" }); 

Merci

10
Khachatur

Je ferais en sens inverse

routes.MapRoute("ImagesFix", "/old_folder/images/{path}", new { controller = "Redirect", action = "Index" }); 

et dans le contrôleur comme ça 

public class RedirectController : Controller
{
    public ActionResult Index(string path)
    {
        return RedirectPermanent("/upload/images/" + path);
    }
}
23
Volodymyr Bilyachat

commencez par télécharger et installer le paquet RouteMagic à partir de ce lien , puis redirigez votre ancienne adresse vers la nouvelle adresse

var NewPath = routes.MapRoute("new", "new_folder/images/{controller}/{action}");
var OldPath = routes.MapRoute("new", "old_folder/images/{controller}/{action}");
routes.Redirect(OldPath ).To(NewPath );

pour plus d'informations, veuillez consulter le lien suivant Redirection d'itinéraires pour conserver des URL persistantes

7
J_hajian_nzd

La réponse ci-dessus à l'aide de RouteMagic est une bonne idée, mais l'exemple de code est incorrect (il est inclus dans le message de Phil en tant que mauvais exemple).

A partir du site de démonstration RouteMagic Github global.asax.cs :

// Redirect From Old Route to New route
var targetRoute = routes.Map("target", "yo/{id}/{action}", new { controller = "Home" });
routes.Redirect(r => r.MapRoute("legacy", "foo/{id}/baz/{action}")).To(targetRoute, new { id = "123", action = "index" });

Si vous spécifiez deux itinéraires, vous allez créer un mappage supplémentaire qui capture les URL que vous ne souhaitez pas.

1
Matt Kemp