2010-12-15 4 views
0

Скажем, у меня есть URL, как это:Как перенаправить, когда в маршруте отсутствует «части» в asp.net MVC?

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

«ан» для английского языка, и я хочу, чтобы убедиться, что всегда есть язык лексема набор в URL. Если пользователь вводит www.site.com/home/list/2010-09-30, я хочу, чтобы он перенаправлял их на www.site.com/en/home/list/2010-09-30 (где en - это язык по умолчанию).

Как это лучше всего сделать в asp.net MVC (версия, если это имеет значение)?

ответ

2

Это, вероятно, лучше всего обрабатывать в пользовательском HttpModule. Я уверен, что вы уже знаете, но на всякий случай вы можете по умолчанию указать значение маршрута «en» в ваших объявлениях маршрутов. Он не перенаправляет страницу, но культура всегда будет установлена ​​в коде, если она отсутствует в URL-адресе.

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

Есть ли у вас пример того, как это будет обрабатываться в пользовательском HttpModule? Я бы создал HttpModule, как описано здесь: http://wiki.asp.net/page.aspx/909/custom-http-module/, но так как я никогда не строил его раньше, не совсем уверен, как проверить язык , имеет ли он доступ к маршруту? – Chaddeus 2010-12-19 22:39:11

0

Простое решение будет иметь маршрут подстановочные (Это должно быть в нижней части файла global.asax):

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

Тогда ваше действие будет:

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

Будет ли шаблон подстановочных знаков поймать разницу между описанным мной адресом? Похоже, что он не достигнет шаблона подстановочных знаков ... Я немного поиграю с маршрутами. Спасибо за идею. – Chaddeus 2010-12-19 22:38:26

Смежные вопросы