Разрешение маршрутов с и без {culture} (. net core 2.2) - PullRequest
1 голос
/ 15 апреля 2020

ОБНОВЛЕНИЕ: Я получил это работает - добавил следующие маршруты:

[Маршрут ("{culture} / [действие]")]

[Маршрут ("/ [действие ] ")]

Проблема в том, что теперь, когда я нахожусь на / da /, он не добавляет / da / к ссылкам, генерируемым в AnchorTagHelper.


Попытка разрешить культуру на маршрутах. Но я также хочу, чтобы это работало без (отступление от engli sh).

domain.com / ru / about

domain.com / about

Я могу только заставить одного из них работать одновременно. Добавление / удаление {culture} заставляет его работать для каждого.

[Маршрут ("{culture} / about")]

Попытались изменить, переместить et c. все с MapRoutes

Есть идеи, как поймать оба маршрута?

У меня есть следующий код:

services.Configure<RouteOptions>(options =>
            {
                options.ConstraintMap.Add("culture", typeof(LanguageRouteConstraint));
            });

-

services.AddLocalization(options => options.ResourcesPath = "Resources");
            services.Configure<RequestLocalizationOptions>(options =>
            {
                var supportedCultures = new List<CultureInfo>
                {

                new CultureInfo("en"),               
                //new CultureInfo("da-DK"),
                new CultureInfo("da")
             };
                //options.DefaultRequestCulture = new RequestCulture(DefaultCultureName, DefaultCultureName);
                options.DefaultRequestCulture = new RequestCulture(culture: "en", uiCulture: "en-US");
                options.SupportedCultures = supportedCultures;
                options.SupportedUICultures = supportedCultures;

                options.RequestCultureProviders.Insert(0, new RouteDataRequestCultureProvider { Options = options });               
            });

-

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

-

public class LanguageRouteConstraint : IRouteConstraint
{
    public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
    {
        if (!values.ContainsKey("culture"))
            return true;

        var culture = values["culture"].ToString();
        return culture == "en" || culture == "da";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...