Web API 如何了解客户 Culture/Language

How a Web API knows the client Culture/Language

我们有一个新的 GET 服务端点,它需要 DateTime 和 Decimal 数据以及其他参数。 为简单起见,这代表我们的请求还没有任何修复:

        app.MapGet("saleEvent", async (string amount, string date) =>
        {
            long.TryParse(amount, out var requestAmount);  //Use *culture* parameter
            DateTime.TryParse(date, out var requestDate);  //Use *culture* parameter
            await DoSomething(requestAmount, requestDate);
        });

我们以字符串形式接收数据,因为我们的一些客户位于不同的国家/地区,根据他们的文化使用不同的格式。

我们希望客户在请求中的某处发送他们的文化,以便能够正确处理接收到的数据。

好吧,我们在这里为我们的客户找到了许多备选方案,可以将其包含在他们的请求中,但我不确定哪个是最好的或最合适的:

accept-language header:似乎是在表明他们期望响应中的文化,与参数无关。不是我们的情况,因为我们的回复只有 200(好的)。

content-language header:好像是表示body的语言。由于我们没有收到 body,而是一个查询字符串,我怀疑我们是否应该使用它。

查询中的一个附加参数,例如:

        app.MapGet("saleEvent", async (string date, string amount, string culture)

A 自定义 header 用于相同目的。

其他建议是接收日期作为 UTC+0,但我认为客户不应该担心删除偏移量。

有什么标准的方法可以做到这一点吗?

We have a new GET service endpoint which expects DateTime and Decimal data,

不,你不知道。只需更正您的端点:

app.MapGet("saleEvent", async (decimal amount, DateTime date) =>

给你。由于此端点被另一个计算机程序调用,因此该程序的工作是确保将其用户输入正确地传输到这些数据类型中。谁知道他们是否 用户输入。该程序也可能从文件或数据库中读取它。

C# 是一种强类型 语言。不要使用编码 anti-patterns.

将其转换为 字符串类型 语言