c# - 在 ASP.NET Core 中获取浏览器语言?

标签 c# azure asp.net-core localization asp.net-core-2.0

我正在尝试从浏览器获取默认语言,我使用以下代码来获取它:

var languages = HttpContext.Request.UserLanguages;

由于 .NET Core 2 不支持上述内容,我进行了测试:

var requestContext = Request.HttpContext.Features.Get<IRequestCultureFeature>();

但是,它返回 null。获取该语言的正确方法或替代方法是什么?

最佳答案

IRequestCultureFeature 提供您的应用程序支持的第一个匹配的语言。支持的语言声明在 Startup 类的 Configure() 中定义(请参阅 example )。如果您仍然需要所有接受的语言作为简单的 string[] (如旧的 Request.UserLanguages 属性),则使用 HeaderDictionaryTypeExtensions.GetTypedHeaders()Microsoft.AspNetCore.Http 命名空间中定义的扩展:

// In your action method.
var languages = Request.GetTypedHeaders()
                       .AcceptLanguage
                       ?.OrderByDescending(x => x.Quality ?? 1) // Quality defines priority from 0 to 1, where 1 is the highest.
                       .Select(x => x.Value.ToString())
                       .ToArray() ?? Array.Empty<string>();

数组languages包含根据优先级参数q接受的语言列表。优先级最高的语言排在第一位。要获取默认语言,请使用数组 languages 的第一个元素。

作为扩展方法:

using System.Collections.Generic;
using System.Linq;

using Microsoft.AspNetCore.Http;

public static class HttpRequestExtensions
{
    public static string[] GetUserLanguages(this HttpRequest request)
    {
        return request.GetTypedHeaders()
            .AcceptLanguage
            ?.OrderByDescending(x => x.Quality ?? 1)
            .Select(x => x.Value.ToString())
            .ToArray() ?? Array.Empty<string>();
    }
}

关于c# - 在 ASP.NET Core 中获取浏览器语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49381843/

相关文章:

c# - 独立的 ASP.Net Core 不读取 appsettings.json 文件

c# - 当我将项目保存在列表框中时,它们之间的行太多

sql - 无法从 SQL Management Studio 连接到 Azure 数据库

php - 如何刷新网站缓存?

visual-studio - Visual Studio Docker 支持 - 使用启动项目文件夹外的 Dockerfile 进行调试

c# - 如何用mongoDB进行 "all or nothing"操作?

c# - 什么是组播端口号?

windows - Jenkins Azure Blob 存储插件,用于将 Build 文件夹的内容而不是构建文件夹的内容复制到 $web azure blob static cotainer

c# - Entity Framework 代码中所有属性的必需规则优先

asp.net-core - 如何在 .Net Core Web API 中完全消除 COR 错误?