Как установить параметр маршрутизации ASP.Net MVC - PullRequest
3 голосов
/ 28 февраля 2012

Я создаю веб-сайт с интернационализацией, и я хочу поддерживать URL-адрес в следующем формате:

"{country}/{controller}/{action}"

Как мне сообщить механизму маршрутизации, что {страна} должна быть настроена с помощьюпеременная сеанса?

1 Ответ

3 голосов
/ 28 февраля 2012

Вы можете сделать это с помощью пользовательской фабрики контроллеров.Начните с вашего маршрута:

routes.MapRoute(
    "Default", // Route name
    "{language}/{controller}/{action}/{id}", // URL with parameters
    new { controller = "Home", action = "Index", language = "tr", id = UrlParameter.Optional }, // Parameter defaults
    new { language = @"(tr)|(en)" }
);

Я работаю с культурой, переопределяя метод GetControllerInstance DefaultControllerFactory.Пример ниже:

public class LocalizedControllerFactory : DefaultControllerFactory {

    protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) {

        //Get the {language} parameter in the RouteData

        string UILanguage;

        if (requestContext.RouteData.Values["language"] == null) {

            UILanguage = "tr";
        else 
            UILanguage = requestContext.RouteData.Values["language"].ToString();

        //Get the culture info of the language code
        CultureInfo culture = CultureInfo.CreateSpecificCulture(UILanguage);
        Thread.CurrentThread.CurrentCulture = culture;
        Thread.CurrentThread.CurrentUICulture = culture;

        return base.GetControllerInstance(requestContext, controllerType);
    }

}

Здесь вы можете получить значение из сеанса вместо его жесткого кодирования, как я сделал.

и зарегистрировать его в Global.asax:

protected void Application_Start() {

    //...    
    ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}
...