ASP Core - локализованные маршруты, не соблюдаемые Url.Action - PullRequest
0 голосов
/ 29 октября 2018

Я реализовал локализованные маршруты, используя ApplicationModelConvention. Это работает нормально, пока я набираю URL прямо в браузере.

Так, например, немецкие маршруты ожидаются только в немецкой культуре. и маршруты из других языков возвращают 404. Именно так, как и ожидалось.

Но когда я использую Url.Action, не соблюдаются ограничения. так, например, если я на английском домене, я получаю русские ссылки

Что я делаю не так?

мой код здесь:

services.AddMvc(o =>
{
    o.Conventions.Insert(0, new LocalizedRouteConvention());
})

public class LocalizedRouteConvention : IApplicationModelConvention
{
    public void Apply(ApplicationModel application)
    {
        foreach (var controller in application.Controllers)
        {
            foreach (var action in controller.Actions)
            {
                var attributes = action.Attributes.OfType<RouteAttribute>().ToArray();
                if (!attributes.Any()) return;

                foreach (var attribute in attributes)
                {
                    SelectorModel defaultSelector = action.Selectors.First();

                    foreach (var localizedVersion in GetLocalized(attribute.Template))
                    {
                        if (!action.Selectors.Any(s => s.AttributeRouteModel.Template == localizedVersion.Template))
                        {
                            action.Selectors.Insert(0, new SelectorModel(defaultSelector)
                            {
                                AttributeRouteModel = localizedVersion,
                                ActionConstraints =
                                {
                                    new CultureActionConstraint { Culture = ((LocalizedRouteAttribute) localizedVersion.Attribute).Culture }
                                }
                            });
                        }
                    }
                }
            }
        }
    }
}
...