首页 > 解决方案 > ASP 核心 - Url.Action 不尊重本地化路由

问题描述

我使用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 }
                                }
                            });
                        }
                    }
                }
            }
        }
    }
}

标签: asp.net-coreasp.net-core-mvcasp.net-core-2.1asp.net-routing

解决方案


推荐阅读