asp.net-core - 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 }
}
});
}
}
}
}
}
}
}
解决方案
推荐阅读
- laravel - 将当前日志流式传输到存储文件夹
- compilation - 如何获取我编辑的启动代码以进行编译?
- c++ - 难以理解某人的源代码来解决 IOI 问题
- c - 每个打印行之后有 2 个空白行
- javascript - 红移是否保证身份列的顺序插入?
- data-structures - 实现投票系统的最佳数据结构
- python - 在关闭程序之前添加文件后如何从 file.txt 中检索信息
- android - 如何过滤 Android 应用程序链接以仅接受具有特定参数的 url?
- flutter - A RenderFlex 右侧溢出 1029 像素
- xcode - FBAudience 网络作为框架集成