首页 > 解决方案 > 应用程序启动或导航到主页时在 url 中设置当前文化

问题描述

我正在开发一个小型 Web 应用程序(Razor Pages),并为其添加了本地化。我现在遇到的问题如下:

当应用程序第一次加载或用户按下主页按钮时(<a href="/"</a>),浏览器中的 url 是这样的:

https://localhost/

当我按下链接时(<a asp-page="/login"></a>),它会将我导航到https://localhost/login而不是https://localhost/{currentCulture}/login

出于这个原因,我希望它是这样的:

https://localhost/{currentCulture}/

例如,对于英语 -->https://localhost/en/

我已经设置了默认的当前文化,它在应用程序启动时应用,但它没有写在 url 中。

我已按照本教程向我的应用程序添加本地化:http ://www.ziyad.info/en/articles/10-Developing_Multiculture_Web_Application

更新:

当用户按下主页按钮时,我这样做了:<a href="/@CultureInfo.CurrentCulture.Name"></a>它可以工作。

标签: c#asp.net-corerazor-pages

解决方案


我不知道它的解决方案有多好,但你可以这样解决这个问题:

创建一个类并实现Microsoft.AspNetCore.Rewrite.IRule

public class FirstLoadRewriteRule : IRule
{
    public void ApplyRule(RewriteContext context)
    {
        var culture = CultureInfo.CurrentCulture;
        var request = context.HttpContext.Request;
        if(request.Path == "/")  
        {
            request.Path = new Microsoft.AspNetCore.Http.PathString($"/{culture.Name}");
        }
    }
}

在您的应用程序request.Path == "/"中,仅当应用程序第一次加载时才为真(当您按主页时,request.path 为“/en”{for English})。因此,默认文化名称将添加到 url。当应用程序加载时,您不会在 url 中看到它,但是当您按 时(<a asp-page="/login"></a>),您会看到您被重定向到https://localhost/en/login.

您必须startup.csConfigure方法中注册此规则:

var options = new RewriteOptions().Add(new FirstLoadRewriteRule());
app.UseRewriter(options);

推荐阅读