gpt4 book ai didi

c# - ASP.NET MVC Core 身份页面中的路由本地化

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:28 25 4
gpt4 key购买 nike

我目前正在 ASP.NET MVC Core 中开发一个 Web 应用程序,用户应该在其中注册。这是一个本地化的 Web 应用程序,应该能够运行多种语言。为了 SEO 友好,我选择了路由本地化,所以我的 url 看起来像: https://localhost:5001/en/Cataloguehttps://localhost:5001/fr/catalogue .

为此,我在 Startup.cs 的 ConfigureServices 方法中添加了这段代码

services.AddLocalization(options => options.ResourcesPath = "Resources");

services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddViewLocalization()
.AddDataAnnotationsLocalization();

在我的 Configure 方法中,我添加了这个:

IList<CultureInfo> supportedCultures = new List<CultureInfo>
{
new CultureInfo("en"),
new CultureInfo("fr"),
};
var localizationOptions = new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
};
var requestProvider = new RouteDataRequestCultureProvider();
localizationOptions.RequestCultureProviders.Insert(0, requestProvider);

app.UseRouter(routes =>
{
routes.MapMiddlewareRoute("{culture=en}/{*mvcRoute}", subApp =>
{
subApp.UseRequestLocalization(localizationOptions);

subApp.UseMvc(mvcRoutes =>
{
mvcRoutes.MapRoute(
name: "areaRoute",
template: "{culture=en}/{area:exists}/{controller=Home}/{action=Index}/{id?}");

mvcRoutes.MapRoute(
name: "default",
template: "{culture=en}/{controller=Home}/{action=Index}/{id?}");
});
});
});

这就像一个魅力。我可以将我的 MVC 页面翻译成我想要的任何风格。我的问题是身份页面。我将这些页面添加为脚手架项目。他们的 URL 指向 https://localhost:5001/Identity/Account/Register .尝试使用 https://localhost:44339/en/Identity/Account/Register 访问它们不起作用。如何使用身份页面实现路由本地化?

最佳答案

AddAreaFolderRouteModelConvention会变魔术:

services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AddAreaFolderRouteModelConvention("Identity", "/Account/", model =>
{
model.Selectors.ForEach(x =>
{
if (x.AttributeRouteModel.Template.StartsWith("Identity"))
{
x.AttributeRouteModel = new AttributeRouteModel()
{
Order = -1,
Template = AttributeRouteModel.CombineTemplates(("{culture=en-US}"),
x.AttributeRouteModel.Template)
};
}
});


});
});

MSDN 页面说:

pageName String The page name e.g. /Users/List

The page name is the path of the file without extension, relative to the pages root directory for the specified area. e.g. the page name for the file Areas/Identity/Pages/Manage/Accounts.cshtml, is /Manage/Accounts.

所以所有页面实际上都在“/Account/”中,这里是一些生成的链接:

/en-us/identity/account/login
/en-us/identity/account/manage/index
/en-us/identity/account/manage/orders

如果你不喜欢路径中的“/identity/”,你可以这样做:

AttributeRouteModel.CombineTemplates(("{culture=en-US}"), 
x.AttributeRouteModel.Template.Substring("Identity/".Length)) //<==Substring

然后所有链接将是:

/en-us/account/login
/en-us/account/manage/index
/en-us/account/manage/orders

enter image description here

关于c# - ASP.NET MVC Core 身份页面中的路由本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54261042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com