ASP.Net Core Tag Helper 链接忽略当前文化
Posted
技术标签:
【中文标题】ASP.Net Core Tag Helper 链接忽略当前文化【英文标题】:ASP.Net Core Tag Helper links ignore current culture 【发布时间】:2018-04-18 23:34:42 【问题描述】:我正在构建一个支持阿尔巴尼亚语、英语和塞尔维亚语的多语言网站,但不知何故,从标签助手生成的所有链接都不断重定向到塞尔维亚语。
这就是我在StartUp.cs
中的内容:
var supportedCultures = new List<CultureInfo>
new CultureInfo("sq-AL"),
new CultureInfo("en-US"),
new CultureInfo("sr-Latn-RS")
;
var localizationOptions = new RequestLocalizationOptions
DefaultRequestCulture = new RequestCulture("sq-AL"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
;
var requestProvider = new RouteDataRequestCultureProvider();
localizationOptions.RequestCultureProviders.Insert(0, requestProvider);
app.UseRouter(routes =>
routes.MapMiddlewareRoute("culture=sq-AL/*mvcRoute", subApp =>
subApp.UseRequestLocalization(localizationOptions);
subApp.UseMvc(mvcRoutes =>
mvcRoutes.MapRoute(
name: "default",
template: "culture=sq-AL/controller=Home/action=Index/id?");
);
);
);
这是我在主导航菜单中的操作链接:
<a asp-controller="Content" asp-action="About">@_localizer["nav_about"]</a>
它曾经运行良好,我试图弄清楚为什么它不再运行但至今不知道。
有趣的是,所有标签都根据所选文化从资源文件中获取值,无论我切换到哪种文化,链接都会不断重定向到塞尔维亚语。从上面的标签助手生成的链接:http://localhost:50807/sr-Latn-RS/Content/About
。
提交表单也是如此:<form asp-controller="Account" asp-action="RegisterProfile" method="post">
结果到http://localhost:50807/sr-Latn-RS/Account/RegisterProfile
,无论当前选择哪种文化。
有人知道塞尔维亚文化从何而来吗?任何形式的帮助将不胜感激!
【问题讨论】:
【参考方案1】:我遇到了同样的问题,并通过将默认文化设置为第一个并指定约束找到了解决方案:
routes.MapRoute(
name: "DefaultCulture",
template: "controller=Home/action=Index/id?",
constraints: new culture = "en",
defaults: new culture = "en" );
routes.MapRoute(
name: "NonDefaultCulture",
template: "culture:culture=en/controller=Home/action=Index/id?"
);
这里的关键是constraints
参数。没有它,标签助手将检查第一个路由并查看它是否匹配,即使当前 URL 的路由具有不同的文化。使用constraints
,算法将看到它无法将当前路由与约束匹配,并将继续执行下一个NonDefaultCulture
路由,这正是我们所需要的。
【讨论】:
以上是关于ASP.Net Core Tag Helper 链接忽略当前文化的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET Core MVC 中选择 ENUM Tag Helper
自动完成在 Visual Studio Code 中的 ASP.NET Core 5 Razor Tag Helper 中不起作用
asp.net Core MVC + form validation + ajax form 笔记
RenderSection() 是不是在 ASP.NET Core 的 <environment> 标签助手中工作?