Net Core 2.2 本地化路由 - 如何始终重定向到默认路由
Netcore 2.2 Localized Routing - How to always redirect to default route
成功使用 Localized routing using ASP.NET Core MVC 2 中列出的项目,但是我想做一些修改,但我不清楚如何进行。
目前我的 start.cs 看起来像下面这样,这工作正常但是它在默认文化英语中的作用是,我的路线是 www.site.com 而当我切换到任何其他文化时我得到 www.site.com/fr/accuel 或 www.site.com/es/casa...
如何让默认语言始终显示为 www.site。com/en/home
startup.cs
// Set up cultures
LocalizationRouteDataHandler.DefaultCulture = "en";
LocalizationRouteDataHandler.SupportedCultures = new Dictionary<string, string>()
{
{ "en", "English" },
{ "fr", "Français" },
{ "es", "Español" }
};
还有我的家庭控制器
[AllowAnonymous]
[LocalizationRoute("en", "home")]
[LocalizationRoute("fr", "accueil")]
[LocalizationRoute("es", "casa")]
public class HomeController : LocalizationController
{
[LocalizationRoute("en", "/home")]
[LocalizationRoute("fr", "/accueil")]
[LocalizationRoute("es", "/casa")]
public IActionResult Index()
{
return View();
}
对于LocalizationRoute
,它定义了MVC的路由模板,用于将请求映射到操作。
对于默认设计,请求 /
将被路由到具有英语文化的 Home/Index
。如果您更喜欢用 /en/home
显示 url,您需要通过以下代码重定向 url:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var options = new RewriteOptions()
.AddRedirect(@"^$", $"{LocalizationRouteDataHandler.DefaultCulture}/{LocalizationRouteDataHandler.DefaultController}");
app.UseRewriter(options);
var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(localizationOptions.Value);
//rest code
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}",
defaults: new { culture = LocalizationRouteDataHandler.DefaultCulture }
);
});
}
注意以上方式,需要保留[LocalizationRoute("en", "/home")]
到HomeController
成功使用 Localized routing using ASP.NET Core MVC 2 中列出的项目,但是我想做一些修改,但我不清楚如何进行。
目前我的 start.cs 看起来像下面这样,这工作正常但是它在默认文化英语中的作用是,我的路线是 www.site.com 而当我切换到任何其他文化时我得到 www.site.com/fr/accuel 或 www.site.com/es/casa...
如何让默认语言始终显示为 www.site。com/en/home
startup.cs
// Set up cultures
LocalizationRouteDataHandler.DefaultCulture = "en";
LocalizationRouteDataHandler.SupportedCultures = new Dictionary<string, string>()
{
{ "en", "English" },
{ "fr", "Français" },
{ "es", "Español" }
};
还有我的家庭控制器
[AllowAnonymous]
[LocalizationRoute("en", "home")]
[LocalizationRoute("fr", "accueil")]
[LocalizationRoute("es", "casa")]
public class HomeController : LocalizationController
{
[LocalizationRoute("en", "/home")]
[LocalizationRoute("fr", "/accueil")]
[LocalizationRoute("es", "/casa")]
public IActionResult Index()
{
return View();
}
对于LocalizationRoute
,它定义了MVC的路由模板,用于将请求映射到操作。
对于默认设计,请求 /
将被路由到具有英语文化的 Home/Index
。如果您更喜欢用 /en/home
显示 url,您需要通过以下代码重定向 url:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var options = new RewriteOptions()
.AddRedirect(@"^$", $"{LocalizationRouteDataHandler.DefaultCulture}/{LocalizationRouteDataHandler.DefaultController}");
app.UseRewriter(options);
var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(localizationOptions.Value);
//rest code
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}",
defaults: new { culture = LocalizationRouteDataHandler.DefaultCulture }
);
});
}
注意以上方式,需要保留[LocalizationRoute("en", "/home")]
到HomeController