You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server .NET8:如何基于域名/TLD设置区域文化?

.NET 8 Blazor Server 基于域名实现自动本地化语言选择

在Blazor Server环境中,program.cs是应用启动阶段的配置代码,此时没有请求上下文,无法直接获取当前请求的域名。要实现基于域名的自动语言选择,需要在每个请求的上下文动态判断域名并设置本地化配置,而非在启动时硬编码。

实现步骤

  1. 定义域名与文化的映射关系
    先在program.cs中定义域名对应的默认文化和支持的文化集合:

    var domainCultureMap = new Dictionary<string, (string DefaultCulture, string[] SupportedCultures)>
    {
        { "mysite.com", ("en-US", new[] { "en-US", "ko-KR" }) },
        { "mysite.kr", ("ko-KR", new[] { "ko-KR", "en-US" }) }
    };
    
  2. 自定义请求本地化提供器
    创建一个自定义的IRequestCultureProvider,用于在每个请求中根据域名获取对应的文化设置:

    public class CustomDomainRequestCultureProvider : IRequestCultureProvider
    {
        private readonly Dictionary<string, (string DefaultCulture, string[] SupportedCultures)> _domainCultureMap;
    
        public CustomDomainRequestCultureProvider(Dictionary<string, (string DefaultCulture, string[] SupportedCultures)> domainCultureMap)
        {
            _domainCultureMap = domainCultureMap;
        }
    
        public Task<ProviderCultureResult?> DetermineProviderCultureResult(HttpContext httpContext)
        {
            var host = httpContext.Request.Host.Host;
            // 提取主域名(处理www.mysite.com这类带前缀的域名)
            var mainDomain = ExtractMainDomain(host);
    
            if (_domainCultureMap.TryGetValue(mainDomain, out var cultureSettings))
            {
                return Task.FromResult(new ProviderCultureResult(
                    cultureSettings.DefaultCulture,
                    cultureSettings.DefaultCulture,
                    cultureSettings.SupportedCultures));
            }
    
            // 域名未匹配时返回默认文化
            return Task.FromResult(new ProviderCultureResult("en-US", "en-US", new[] { "en-US", "ko-KR" }));
        }
    
        private string ExtractMainDomain(string host)
        {
            var parts = host.Split('.');
            // 取最后两段作为主域名(如mysite.com、mysite.kr)
            return parts.Length >= 2 ? $"{parts[^2]}.{parts[^1]}" : host;
        }
    }
    
  3. 在program.cs中配置本地化
    将自定义提供器添加到RequestLocalizationOptions中,确保它优先于其他默认提供器执行:

    var localizationOptions = new RequestLocalizationOptions();
    // 将自定义提供器插入到最前面,确保优先执行
    localizationOptions.RequestCultureProviders.Insert(0, new CustomDomainRequestCultureProvider(domainCultureMap));
    
    app.UseRequestLocalization(localizationOptions);
    

关键说明

  • 该方案会在每个请求到达时通过HttpContext获取域名,动态设置文化,确保服务器端首次渲染时就应用正确的语言,符合搜索引擎索引的要求。
  • 自定义提供器优先于默认的Cookie、Accept-Language提供器执行,保证域名规则的优先级最高。
  • ExtractMainDomain方法可根据实际需求调整,比如处理多级别域名或特定子域名场景。

内容的提问来源于stack exchange,提问作者Busta Di Canni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 07:02:40