c# - 应用程序启动或导航到主页时在 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>
它可以工作。
解决方案
我不知道它的解决方案有多好,但你可以这样解决这个问题:
创建一个类并实现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);
推荐阅读
- javascript - 有人可以帮助弄清楚如何循环这段代码吗?
- reactjs - 我的字体没有出现在网络中(reactjs,样式化组件)
- java - 如何实现多租户 Spring Boot 应用程序(每个用户都有自己的数据库)
- c# - StorageLibraryContentChangedTrigger 后台任务的 UWP 注册失败并显示“未找到”
- spring-cloud-function - spring-cloud-function-deployer 如何在运行时部署/取消部署功能?
- java - 使用 JavaCompiler 类编译具有依赖项和文本文件的目录
- caching - 计算 CPU 缓存命中
- memory - 在 CPU 和 GPU 之间同步静态分配的结构实例
- java - 从 Docker Java 回调期间套接字读取中断
- php - base64_decode 显示损坏的字符