如何处理 NullProviderCultureResult?在没有重定向的情况下呈现主页不是很奇怪吗?



在一个Net 7项目中,我正在Program中设置本地化:

builder.Services.Configure<RequestLocalizationOptions>(x => {
x.AddSupportedCultures("pt", "en");
x.AddSupportedUICultures("pt", "en");
x.SetDefaultCulture("pt");
x.RequestCultureProviders.Clear();
x.AddInitialRequestCultureProvider(new RouteDataRequestCultureProvider { RouteDataStringKey = "culture" });
});
application.UseRequestLocalization();

我有两个Razor页面(Index和About):

Index: @page "{culture?}"
About: @page "/{culture?}/about"

我能够访问主页(索引)使用:

/
/en
/pt

但是我只能使用

访问About页面
/en/about
/pt/about

当我试图访问"/about"url不改变,但首页呈现。

这不是很奇怪吗?不应该重定向到索引和改变索引Url?

甚至重定向到"/pt/about"因为PT是默认的文化?

我检查了RouteDataRequestCultureProvider源,我有:

if (culture == null && uiCulture == null)
{
// No values specified for either so no match
return NullProviderCultureResult;
}

我不能定义当NullProviderCultureResult发生时该怎么做吗?

这可能不能回答你的问题,但至少可以解释为什么它是这样工作的。

但是我只能使用:

访问About页面
/en/about
/pt/about

当我试图访问"/about"url不改变,但首页呈现。

这主要是因为url "/about"与路由/{culture}匹配,因此它假定"culture=about">,结果它重定向到索引页,因为它匹配路由:

Index: @page "{culture?}"

然而,由于没有名为"about"的文化;它呈现默认区域性";pt"在你的情况下。

相关内容

最新更新