gpt4 book ai didi

c# - 如何在启用 ASP.NET Core 2.2 EndpointRouting 的情况下使用 RouteDataRequestCultureProvider?

转载 作者:行者123 更新时间:2023-12-01 18:01:34 25 4
gpt4 key购买 nike

我正在尝试使用RouteDataRequestCultureProvider在新的 ASP.NET Core 2.2 MVC 项目中。

我已阅读有关 Routing in ASP.NET Core 的 Microsoft 文档了解 2.2 中引入的更改,但我不明白为什么“文化”不被识别为 URL 生成的环境值。

我更新了ConfigureServices在 Startup.cs 中包含设置:

var supportedCultres = new[] { new CultureInfo("en"), new CultureInfo("fr") };
services.Configure<RequestLocalizationOptions>(options =>
{
options.DefaultRequestCulture = new Microsoft.AspNetCore.Localization.RequestCulture("en");
options.SupportedCultures = supportedCultres;
options.SupportedUICultures = supportedCultres;
options.RequestCultureProviders = new[] { new RouteDataRequestCultureProvider { Options = options } };
});

我修改了 Configure 中的应用程序和默认路由使用“文化”路径段:

var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value;
app.UseRequestLocalization(locOptions);
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{culture:regex(^(en|fr)$)}/{controller=Home}/{action=Index}/{id?}");
});

此路由将解析为 HomeController.Index()当我按预期导航到/en 或/fr 时,但使用 anchor 标记帮助程序指向其他操作的任何链接都将呈现为 <a href=""> (包括脚手架生成的隐私链接)。

关闭 EnableEndpointRouting 会导致 anchor 标记帮助程序再次工作:

services.AddMvc(opts => { opts.EnableEndpointRouting = false; })
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

添加显式 asp-route-culture值也有效:

<a asp-route-culture="en" asp-controller="Home" asp-action="About">About</a>

但我不明白为什么需要进行任何更改,因为“文化”路线值已经存在于 RouteData.Values 中集合,并由 anchor 标记帮助程序自动使用以前的路由模型。这些是有效的操作路由,那么为什么当路由包含区域性时 URL 生成会失败?

最佳答案

我在使用 net core 3.1 时遇到了同样的问题。我最终设法找到原因并找到解决方案。

read my solution here - https://stackoverflow.com/questions/59267971/using-routedatarequestcultureprovider-in-asp-net-core-3-1/59283426#59283426

TLDNR:由于核心 2.2 环境路由值不再传递到 url 构建器中,因此您需要显式传递它们。我通过扩展 razor anchor 标记帮助器解决了这个问题。

关于c# - 如何在启用 ASP.NET Core 2.2 EndpointRouting 的情况下使用 RouteDataRequestCultureProvider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54352705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com