ASP核心-Url.Action不尊重本地化的路由

时间:2018-10-29 12:33:46

标签: asp.net-core asp.net-core-mvc asp.net-core-2.1 asp.net-routing

我使用ApplicationModelConvention实现了本地化路由。 只要我直接在浏览器中输入网址,此方法就可以正常工作。

例如,仅德国文化中就有德国路线。和其他语言的路由返回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 }
                                }
                            });
                        }
                    }
                }
            }
        }
    }
}

0 个答案:

没有答案