Netcore 2.2本地化路由-如何始终重定向到默认路由

时间:2019-09-02 13:47:00

标签: c# asp.net-core localization asp.net-core-localization

成功使用了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" }
};

还有我的HomeController

[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();
    }

1 个答案:

答案 0 :(得分:1)

对于/,它定义了MVC的路由模板,该模板用于将请求映射到操作。

对于默认设计,对于请求Home/Index,该请求将被路由到具有英语文化的/en/home。如果您希望使用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")]

注意对于上述方法,您需要将{{1}}保留在HomeController中。