2013-04-16 6 views
1

У меня есть свой маршрут по умолчанию, как этоMvc: Пользовательский маршрут по умолчанию

routes.MapRoute(
      name: "Default", 
      url: "{country}/{lang}/{controller}/{action}", 
      defaults: new { controller = "Home", action = "Index" } 
     ); 

Но когда мой сайт начинает подмигнули поиски/Home маршрут и это не распространяется существует, мне нужно передать эту страну и lang при запуске, но я не знаю, где? и получить мой маршрут по умолчанию с чем-то вроде ES/es/Home.

Заранее спасибо.

+1

Это статья, которая, я считаю, отвечает на вашу проблему. Это относительно коротко и очень хорошо объясняет это! Это действительно связано с добавлением ограничений для ваших маршрутов. Надеюсь, это поможет! http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-a-custom-route-constraint-cs – Jose

ответ

1

Если вы ищете значения по умолчанию для страны и языка, просто изменить значение по умолчанию,

defaults: new { country="ES", lang="es", controller = "Home", action = "Index" } 

Она наполнит страну и вариант языки со значением по умолчанию.

Или, если ваше требование установить ваши приложения, начиная URL, как,

www.site.com/ES/es 

поместите следующий код в Application_BeginRequest

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    if (String.Compare(Request.Path, Request.ApplicationPath, StringComparison.InvariantCultureIgnoreCase) == 0) 
      Response.Redirect(Request.Path + "ES/en"); 
} 

Редактировать

Код в Application_BeginRequest будет выполняться для каждого запроса, включая URL ресурса (js/css). Вы можете удалить код Application_BeginRequest и поместить код в начало в действии по умолчанию контроллера по умолчанию, чтобы иметь тот же эффект. как:

//Home Controller 
public ActionResult Index(string country, string lang) 
{ 
    if (String.Compare(Request.Path, Request.ApplicationPath, StringComparison.InvariantCultureIgnoreCase) == 0) 
     return Redirect(Request.Path + string.Format("{0}/{1}", country, lang)); 
    return View(); 
} 

Редактировать

кода,

if (String.Compare(Request.Path, Request.ApplicationPath, StringComparison.InvariantCultureIgnoreCase) == 0) 
     return Redirect(Request.Path + string.Format("{0}/{1}", country, lang)); 

проверяет входящий URL является корневой URL для приложения, и если да перенаправлять с дополнительной информацией о маршруте. В идеале Request.Path и Request.ApplicationPath оба значения будут иметь значение / для начального URL-адреса. Здесь эта проверка выполняется только в исходном/стандартном URL-адресе, поэтому я не думаю, что этот код заставит сайт заметно замедлиться. Вы можете прокомментировать код и проверить, увеличивается ли производительность, чтобы убедиться, что этот код является причиной производительности.

+0

Работает отлично, спасибо :) – Steve

+0

добро пожаловать. :) – shakib

+0

У меня есть страница макета, где я импортирую свои файлы javascript и css, и теперь это сравнение каждого javascript и css, которые есть у меня на моем веб-сайте, когда я перезагружаю страницу, как я могу избежать этого? Благодарю. – Steve