asp mvc core url локализация - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь локализовать URL своего приложения.К сожалению, на большинстве страниц приведены примеры локализации приложений. Например:

http://localhost/en-US/Home/Index

Это не то, что я хочу.Я хотел бы локализовать URL-адреса следующим образом:

http://localhost/Welcome

http://localhost/Bienvenue [приветственное слово на французском языке]

Культурамне уже удалось управлять cookie-файлом, и он хорошо работает с классом CookieRequestCultureProvider.

Итак, у меня есть эта информация, и локализация на страницах в порядке.

Мне удалось зарегистрировать все маршруты.Я нуждаюсь.Оба примера выше работают и отображают страницу.Благодаря этому:

        public void Apply(ApplicationModel application)
        {
            foreach (var controller in application.Controllers)
            {
                foreach (var action in controller.Actions)
                {
                    var localizedRouteAttributes = action.Attributes.OfType<LocalizedRouteAttribute>().ToArray();
                    if (localizedRouteAttributes.Any())
                    {
                        foreach (var localizedRouteAttribute in localizedRouteAttributes)
                        {
                            var localizedVersions = GetLocalizedVersionsForARoute(localizedRouteAttribute.Name); // GetLocalizedVersionsForARoute contains all routes translated and group by culture.
                            foreach (var localizedVersion in localizedVersions)
                            {
                                if (!action.Selectors.Any(s => s.AttributeRouteModel.Template == localizedVersion.Template))
                                    action.Selectors.Add(new SelectorModel(action.Selectors.First()) { AttributeRouteModel = localizedVersion });
                            }
                        }
                    }
                }
            }
        }

Таким образом, mvc берет последний регистр маршрута в селекторах (если FR, то это FR маршрут).Я не могу управлять другими маршрутами с помощью этого фрагмента кода, потому что он загружается с приложением.И не может работать с динамическим использованием (приложение позволяет изменить язык, когда я хочу).

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

1 Ответ

0 голосов
/ 25 мая 2018

посмотрите в этом небольшом примере, я надеюсь помочь вам :)

1) в вашем контроллере:

[RoutePrefix("/")]
public HomeController : Controller {


    [HttpGet]
    [Route("Welcome")]
    public ActionResult Index() {
        return View(); 
    }
}

И включите его в таблице маршрутов "rout.MapMvcAttributeRoutes ();"вот так

public class RouteConfig {

    public static void RegisterRoutes(RouteCollection routes) {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        //enable attribute routing
        routes.MapMvcAttributeRoutes();

        //convention-based routes
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = "" }
        );
    }
}

Предлагаю прочитать эту статью по этому адресу: https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute-routing-in-asp-net-mvc-5/

если у вас есть еще вопросы, вы можете задать их мне

...