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

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

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

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

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?}");
});

当我按预期导航到/ en或/ fr时,此路由将解析为HomeController.Index(),但是使用Anchor Tag Helper指向其他操作的任何链接都将显示为<a href="">(包括支架产生的“隐私”链接)。

关闭EnableEndpointRouting会导致锚标记助手再次工作:

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集合中,并且由先前的路由模型的定位标记帮助程序自动使用。这些是采取行动的有效途径,那么当途径包含区域性时,为什么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 tag helper解决了它。

如何在ASP.NET Core Web应用程序中增加JSON反序列化MaxDepth限制 - c#

我们正在将ASP.NET Core 2.1与.NET Framework 4.6.2结合使用。我们有一个客户需要向我们的Web应用程序发送一个很大程度上嵌套的json结构。当他们进行此调用时,我们将输出以下日志并返回错误: 读取器的MaxDepth超过了32。路径“ super.long.path.to property”,第1行,位置42111。”我浏览了…

ASP.NET Core 2.0中的多个身份 - c#

我正在将ASP.NET Core 1.0应用程序迁移到ASP.NET Core 2.0。在我的启动中,我正在配置两个身份:services.AddIdentity<IdentityUser, IdentityRole>(configureIdentity) .AddDefaultTokenProviders() .AddUserStore<…

如何基于框架执行不同的动作? (ASP.NET 5) - c#

假设您必须将C#应用程序从.NET框架迁移到新的.NET Core,因为您希望拥有其中的一些新功能。您拥有自己的代码库,并且希望一次获得完整的工作部件,因为一次迁移所有的工作量很大。主要思想是成为未来的完全核心。我的问题是:有没有一种方法可以检查一个框架中存在但另一个框架中没有的功能?还是根据框架执行不同的动作? 参考方案 有编译器指令(#if)来检查与两个…

从Axios请求以ASP.NET Core API返回下载文件 - c#

大家好我正在尝试从Axios Request从ASP.NET Core Web API下载文件。这是我的示例API方法。 (基于此stackoverflow question的代码)[HttpPost("download")] public async Task<IActionResult> DownloadFile(){ .…

为什么ASP Net Core 2.2不释放内存? - c#

我正在使用以下项目创建的默认项目来测试ASP Net Core 2.2:Visual Studio>文件>新建>项目> ASP NET Core Web应用程序>下一步>创建。在界面上按IIS Express按钮,然后自动转到https://localhost:44356/api/values编辑:重点是,我正在测试ASP…