小编Ere*_*sen的帖子

ASP.NET Core 5.0 RouteDataRequestCultureProvider 删除 url 中的默认区域性

我尝试向我的 asp.net-core 项目添加多语言功能,但 RequestLocalization 中的 .net 3.1 和 5.0 之间存在一些变化,我无法得到我想要的。我为每种语言添加了资源文件,并在我的剃刀页面中使用了资源,它可以工作,但有一个不需要的默认路由错误,我希望我的路由能够对默认文化友好地工作。

这就是我要的,

对于默认文化(土耳其语):

site.com/foo
site.com/foo/bar
site.com/foo/bar/5
Run Code Online (Sandbox Code Playgroud)

对于非默认区域性(英语):

site.com/en/foo
site.com/en/foo/bar
site.com/en/foo/bar/5
Run Code Online (Sandbox Code Playgroud)

我的另一个问题是;我的项目呈现 site.com/foo/foo/bar 这个网址就像 site.com/tr/foo/bar 一样,这是不行的,我想它应该重定向到 404 页面。

我的启动示例代码如下:

public void ConfigureServices(IServiceCollection services)
{
    services.AddResponseCompression();
    services.AddLocalization(opts => opts.ResourcesPath = "Resources");
    services.Configure<RequestLocalizationOptions>(options =>
    {
        var supportedCultures = new[]
        {
            new CultureInfo("tr-TR"),
            new CultureInfo("en")
        };

        options.DefaultRequestCulture = new RequestCulture("tr");
        options.SupportedCultures = supportedCultures;
        options.SupportedUICultures = supportedCultures;
        options.RequestCultureProviders.Insert(0, new RouteDataRequestCultureProvider());
    });

    services.AddControllersWithViews();
    services.AddRazorPages();
    services.AddRouting(options => options.LowercaseUrls = true);
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{ …
Run Code Online (Sandbox Code Playgroud)

c# .net-core asp.net-core asp.net-core-localization asp.net-core-5.0

5
推荐指数
1
解决办法
3068
查看次数