2010-12-15 4 views
0

Disons que j'ai une URL comme ceci:Comment faire pour rediriger lorsque route "pièces" dans asp.net MVC?

www.site.com/en/home/list/2010-09-30 

Le « en » est pour l'anglais, et je veux vous assurer qu'il ya toujours un ensemble jeton de langue dans l'URL. Si un utilisateur entre www.site.com/home/list/2010-09-30 je veux qu'il les redirige vers www.site.com/en/home/list/2010-09-30 (où en est la langue par défaut).

Comment cela est-il le mieux accompli dans asp.net MVC (version si cela est important)?

Répondre

2

Cela serait probablement mieux géré dans un HttpModule personnalisé. Je suis sûr que vous le savez déjà, mais juste au cas où, vous pouvez également utiliser la valeur de route "en" dans vos déclarations de route. Il ne redirigera pas la page, mais la culture sera toujours définie dans le code si elle n'est pas présente dans l'URL.

context.MapRoute(
    "Default", 
    "{culture}/{controller}/{action}/{id}", 
    new { culture = "en", action = "Index" }); 
+0

Avez-vous un exemple de la façon dont cela serait géré dans le HttpModule personnalisé? Je créerais le HttpModule comme décrit ici: http://wiki.asp.net/page.aspx/909/custom-http-module/ mais comme je n'en ai jamais construit un auparavant, je ne sais pas trop comment vérifier la langue , a-t-il accès à la route? – Chaddeus

0

Une solution simple serait d'avoir une route générique (Cela devrait être au bas de votre fichier global.asax):

routes.MapRoute(
       "WildCard", 
       "{*url}", 
       new { controller = "Main", action = "EnglishDefault" } 
      ); 

Ensuite, votre action serait:

public ActionResult EnglishDefault (string url) 
{ 
    return Redirect("/en/" + url); 
} 
+0

Est-ce que la route générique attraperait la différence entre l'URL que j'ai décrite? On dirait qu'il n'atteindrait pas la route générique ... Je vais jouer avec les routes un peu. Merci pour l'idée. – Chaddeus

+0

@Chad - Je m'assurerais que j'avais des routes définies au-dessus de cette route générique pour gérer les URL correctement formatées. Cette route irait au bas de votre table de route et serait utilisée comme une capture pour ensuite redistribuer au format correct. – amurra

Questions connexes