C# 在管线中使用区域性参数更改区域性
在Asp.Net 3.1应用程序上,我在启动时具有以下本地化功能:C# 在管线中使用区域性参数更改区域性,c#,asp.net-core,asp.net-core-3.1,C#,Asp.net Core,Asp.net Core 3.1,在Asp.Net 3.1应用程序上,我在启动时具有以下本地化功能: application.UseRequestLocalization(new RequestLocalizationOptions { DefaultRequestCulture = new RequestCulture("pt"), SupportedCultures = new[] { new CultureInfo("en"), new CultureInfo("pt") }, Supporte
application.UseRequestLocalization(new RequestLocalizationOptions {
DefaultRequestCulture = new RequestCulture("pt"),
SupportedCultures = new[] { new CultureInfo("en"), new CultureInfo("pt") },
SupportedUICultures = new[] { new CultureInfo("en"), new CultureInfo("pt") }
});
application.UseEndpoints(x => {
x.MapDefaultControllerRoute();
});
我正在控制器上使用属性路由:
[HttpGet("about")]
public IActionResult Index() => View();
我能够通过以下方式查看正确文化中的内容:
/about?culture=pt
/about?culture=en
但我希望将区域性作为管线参数,因此我将其更新为:
[HttpGet("{culture?}/about")]
public IActionResult Index() => View();
但是,当我访问以下内容时,区域性不会改变:
/pt/about
/en/about
如何执行此操作?开箱即用,
UseRequestLocalization
支持以下命令:
“{culture?}”
添加到HttpGet
约束,您已经将其转换为路由参数。这是受支持的,但必须进行配置。下面是一个例子:
var requestLocalizationOptions = new RequestLocalizationOptions {
DefaultRequestCulture = new RequestCulture("pt"),
SupportedCultures = new[] { new CultureInfo("en"), new CultureInfo("pt") },
SupportedUICultures = new[] { new CultureInfo("en"), new CultureInfo("pt") }
};
requestLocalizationOptions.RequestCultureProviders.Add(
new RouteDataRequestCultureProvider());
application.UseRequestLocalization(requestLocalizationOptions);
如果您希望首先检查RouteDataRequestCultureProvider
,请将其添加为第一个提供程序:
requestLocalizationOptions.RequestCultureProviders.Insert(
0, new RouteDataRequestCultureProvider());
内置扩展方法使用与上面相同的实现。使用如下所示的方法:
requestLocalizationOptions.AddInitialRequestCultureProvider(
new RouteDataRequestCultureProvider());
您是否尝试过使用
选项配置RequestLocalizationOptions
代码>RouteDataStringKey
的默认值是“culture”
,但如果您的route参数设置为其他值,您将如何设置它。您的建议几乎有效,但它会破坏路由属性。路由开始是控制器/操作,而不是我定义的属性路由