应用程序启动或导航到主页时在 url 中设置当前文化

Posted

技术标签:

【中文标题】应用程序启动或导航到主页时在 url 中设置当前文化【英文标题】:Set Current culture in url when application starts or navigates to home page 【发布时间】:2019-06-06 12:51:36 【问题描述】:

我正在开发一个小型 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_Multicultural_Web_Application

更新:

当用户按下主页按钮时,我这样做了:<a href="/@CultureInfo.CurrentCulture.Name"></a> 并且它有效。

【问题讨论】:

你想通过 currentCulutre 说什么? http://localhost/en/ 表示英文,例如.. 【参考方案1】:

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

创建一个类并实现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.cs中注册这个规则Configure方法:

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

【讨论】:

以上是关于应用程序启动或导航到主页时在 url 中设置当前文化的主要内容,如果未能解决你的问题,请参考以下文章

准备继续时在目标视图控制器中设置选择器

点击导航抽屉项目时在 WebView 中打开链接

如何在运行WSL时在Windows中设置VS代码调试?

如何在页面加载时在反应打字稿中设置可见性

在 UITableViews 中设置导航栏半透明以启动动画

javascript中overflow:hidden;的意思?