asp.net core 2.2 Url.Action игнорирует активную культуру - PullRequest
0 голосов
/ 13 марта 2019

У меня есть приложение asp.net core mvc 2.2 с внедренной Локализацией Запроса. Вот мой startup.cs

public void ConfigureServices(IServiceCollection services)
    {

        services.AddLocalization(options => { options.ResourcesPath = "Resources"; });
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        services.AddIdentity<ApplicationUser, ApplicationRole>().AddUserManager<ApplicationUserManager>()
            .AddUserStore<ApplicationUserRoleStore>().AddSignInManager<ApplicationSignInManager>().AddRoleStore<ApplicationUserRoleStore>().AddRoles<ApplicationRole>()
            .AddDefaultTokenProviders();

       services.AddAuthentication(sharedOptions =>
        {
            sharedOptions.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
       }).AddCookie();
        services.ConfigureApplicationCookie(options => { options.LoginPath = "/en-US/Login"; });
        services.AddTransient<IBusinessMailRepository, BusinessMailRepository>();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseAuthentication();

        IList<CultureInfo> supportedCultures = new List<CultureInfo>
        {
            new CultureInfo("en-US"),
            new CultureInfo("cs-CZ"),
        };
        var localizationOptions = new RequestLocalizationOptions
        {
            DefaultRequestCulture = new RequestCulture("en-US"),
            SupportedCultures = supportedCultures,
            SupportedUICultures = supportedCultures
        };

        var requestProvider = new RouteDataRequestCultureProvider();
        localizationOptions.RequestCultureProviders.Insert(0, requestProvider);

        app.UseRouter(routes =>
        {
            routes.MapMiddlewareRoute("{culture=en-US}/{*mvcRoute}", subApp =>
            {
                subApp.UseRequestLocalization(localizationOptions);

                subApp.UseMvc(mvcRoutes =>
                {
                    mvcRoutes.MapRoute(
                        name: "default",
                        template: "{culture=en-US}/{controller=Home}/{action=Index}/{id?}");
                });
            });
        });
    }

Проблема в том, что большинство вызовов @ Url.Action () игнорирует активную культуру, включенную в URL. Например - я запрашиваю localhost: 12345 / cs-cz / ControllerName / ActionName, и большинство гиперссылок, созданных на странице, имеют localhost: 12345 / en-us / ... culture по умолчанию.

Мне нужно, чтобы все вызовы Url.Action генерировали URL-адреса на основе текущей выбранной культуры, включенной в исходный URL-адрес. Другими словами, мне нужно сохранять один выбранный идентификатор культуры между запросами.

Я привык к этому из asp.net MVC 5, где этот метод требует только еще одного сопоставления маршрутов и хорошо работает без дополнительной настройки.

Может кто-нибудь помочь мне, пожалуйста? Благодаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...