![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Routing
В DefaultAreaRegistration добавим обработка lang (/Areas/Default/DefaultAreaRegistration.cs): context.MapRoute( name: " lang", url: " {lang}/{ controller}/{action}/{id}", defaults: new { controller = " Home", action = " Index", id = UrlParameter.Optional }, constraints: new { lang = @" ru|en" }, namespaces: new[] { " LessonProject.Areas.Default.Controllers" } );
context.MapRoute( name: " default", url: " {controller}/{action}/{id}", defaults: new { controller = " Home", action = " Index", id = UrlParameter.Optional, lang = " ru" }, namespaces: new [] { " LessonProject.Areas.Default.Controllers" } ); Итак, если строка у нас начинается с lang, то мы используем обработку маршрута “lang”. Обратите внимание на contstrains (ограничения), тут задается, что язык может быть только ru или en. Если это условие не исполняется, то мы переходим к следующей обработке маршрута – “default”, где по-умолчанию lang=ru. Используем это для инициализации в DefaultController для смены культуры потока (Thread.Current.CurrentCulture) (/Areas/Default/DefaultController.cs): public class DefaultController: BaseController { public string CurrentLangCode { get; protected set; }
public Language CurrentLang { get; protected set; }
protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (requestContext.HttpContext.Request.Url! = null) { HostName = requestContext.HttpContext.Request.Url.Authority; }
if (requestContext.RouteData.Values[" lang" ]! = null & & requestContext.RouteData.Values[" lang" ] as string! = " null") { CurrentLangCode = requestContext.RouteData.Values[" lang" ] as string; CurrentLang = Repository.Languages.FirstOrDefault(p => p.Code == CurrentLangCode);
var ci = new CultureInfo(CurrentLangCode); Thread.CurrentThread.CurrentUICulture = ci; Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name); } base.Initialize(requestContext); } }
Естественно, в BaseController мы убираем инициализацию культуры потока через конфигурационный файл (/Controllers/BaseController.cs): protected override void Initialize(System.Web.Routing.RequestContext requestContext) { if (requestContext.HttpContext.Request.Url! = null) { HostName = requestContext.HttpContext.Request.Url.Authority; } base.Initialize(requestContext); } Запускаем, и проверяем, как изменяется вывод даты: Первый этап пройден. Переходим к управлению ресурсам сайта.
|