1

我们有一个新的 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);
        });

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

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

好吧,在这里,我们为客户找到了许多替代方案,可将其包含在他们的请求中,但我不确定哪种方案最适合或最适合执行此操作:

接受语言标头:似乎表明他们期望在响应中使用哪种文化,与参数无关。不是我们的情况,因为我们的回答只是 200(OK)。

content-language标头:似乎表示正文的语言。由于我们没有收到body,而是一个查询字符串,我怀疑我们应该使用它。

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

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

用于相同目的的自定义标头。

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

有没有标准的方法来做到这一点?

4

1 回答 1

3

我们有一个新的 GET 服务端点,它需要 DateTime 和 Decimal 数据,

不,你没有。只需更正您的端点:

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

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

C# 是一种强类型语言。不要使用编码反模式将其转换为字符串类型的语言。

于 2022-02-08T14:01:04.643 回答