Netcore 2.2 Localized Routing - Как всегда перенаправлять на маршрут по умолчанию

Успешно используя проект, изложенный на Локализованная маршрутизация с использованием ASP.NET Core MVC 2, однако я хотел бы внести несколько изменений, и я не понимаю, как это сделать.

В настоящее время мой start.cs выглядит так, как показано ниже, он работает нормально, однако то, что он делает, - это английский язык по умолчанию, мой маршрут - www.site.com, тогда как когда я переключаюсь на любую другую культуру, я получаю www.site.com/fr/ accuel или www.site.com/es/casa ...

Как сделать так, чтобы язык по умолчанию всегда отображался как www.site.com/en/home

startup.cs

// Set up cultures
LocalizationRouteDataHandler.DefaultCulture = "en";
LocalizationRouteDataHandler.SupportedCultures = new Dictionary<string, string>()
{
    { "en", "English" },
    { "fr", "Français" },
    { "es", "Español" }
};

И мой HomeController

[AllowAnonymous]
[LocalizationRoute("en", "home")]
[LocalizationRoute("fr", "accueil")]
[LocalizationRoute("es", "casa")]
public class HomeController : LocalizationController
{
    [LocalizationRoute("en", "/home")]
    [LocalizationRoute("fr", "/accueil")]
    [LocalizationRoute("es", "/casa")]
    public IActionResult Index()
    {
        return View();
    }

person Tim Cadieux    schedule 02.09.2019    source источник


Ответы (1)


Для LocalizationRoute он определяет шаблон маршрута для MVC, который используется для сопоставления запроса с действием.

Для дизайна по умолчанию, для запроса /, который будет перенаправлен на Home/Index с английской культурой. Если вы предпочитаете отображать URL-адрес с помощью /en/home, вам необходимо перенаправить URL-адрес с помощью кода ниже:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    var options = new RewriteOptions()
    .AddRedirect(@"^$", $"{LocalizationRouteDataHandler.DefaultCulture}/{LocalizationRouteDataHandler.DefaultController}");           

    app.UseRewriter(options);

    var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
    app.UseRequestLocalization(localizationOptions.Value);            

    //rest code
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}",
            defaults: new { culture = LocalizationRouteDataHandler.DefaultCulture }
        );
    });
}

Примечание. Для вышеуказанного способа необходимо сохранить [LocalizationRoute("en", "/home")] в HomeController.

person Edward    schedule 03.09.2019