ASP.NET Core razor 页面 - 使用 asp-route-

问题描述 投票:0回答:1

我已经为我的 asp.net core 项目 (.NET 8) 实现了基于路由的本地化。基本上满足这些要求:

  • 当请求根时(路径 = '/'),
    CultureInfo.CurrentCulture
    设置为
    ru-RU
  • 当根请求为 '/en' 时,
    CultureInfo.CurrentCulture
    设置为
    en-US
  • 对于默认区域性,当请求 '/ru'(或 '/ru/[whatever]')时,请求返回“永久移动 (301)”,位置设置为 '/ '(或分别为 '/[随便]'

但是当我生成主页链接时:

<a asp-page="/Index" asp-route-lang="@CultureInfo.CurrentCulture.TwoLetterISOLanguageName">Home</a>

我得到

https://localhost/ru
代表默认文化 (ru-RU),
https://localhost/en
代表英语 (en-US)。

问题:

在生成默认区域性的 URL 时,如何去掉

/ru
部分(而不是拥有
https://localhost/ru
,我只需要获得
https://localhost
)。我可以在每个
asp-route-lang="..."
中使用一个条件,但这不是一个好方法。

c# .net asp.net-core razor-pages
1个回答
0
投票

认为可以通过自定义标签助手删除路由中的默认区域性(路由路径)。

如下所示,您可以将

asp-route-lang
属性的值与应用程序的默认区域性进行比较。如果两个值相同,则覆盖
href
属性。

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Razor.TagHelpers;
using Microsoft.Extensions.Options;
using System;

[HtmlTargetElement("a")]
public class AnchorWithLangTagHelper : TagHelper
{
    [HtmlAttributeName("asp-route-lang")]
    public string Lang { get; set; }

    private readonly RequestLocalizationOptions _options;

    public AnchorWithLangTagHelper(IOptions<RequestLocalizationOptions> options)
    {
        _options = options.Value;
    }

    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        // Remove the Lang from route if provided Lang is default culture 
        if (!String.IsNullOrEmpty(Lang)
            && _options.DefaultRequestCulture.UICulture.TwoLetterISOLanguageName.Equals(Lang, StringComparison.OrdinalIgnoreCase))
        {
            var generatedHref = output.Attributes["href"].Value.ToString();
            generatedHref = generatedHref.Replace($"/{Lang}/", "/");

            output.Attributes.SetAttribute("href", generatedHref);
        }
    }
}

并通过 Views/_ViewImport.cshtml

 中的 @addTagHelper 添加自定义标签助手,使其在所有视图中可用。

@addTagHelper <Namespace of AnchorWithLangTagHelper>.AnchorWithLangTagHelper, <Project Namespace>

演示

© www.soinside.com 2019 - 2024. All rights reserved.