Как веб-API знает культуру/язык клиента

У нас есть новая конечная точка службы 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 : кажется, указывает, какую культуру они ожидают в ответе, ничего общего с параметрами. Не наш случай, так как наш ответ всего 200 (ОК).

заголовок content-language : кажется, указывает на язык тела . Поскольку мы получаем не тело , а строку запроса, я сомневаюсь, что нам следует ее использовать.

Один дополнительный параметр в запросе, например:

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

Пользовательский заголовок для той же цели.

Другая рекомендация состояла в том, чтобы получить дату как UTC+0, но я думаю, что клиент не должен беспокоиться об удалении смещения.

Есть ли стандартный способ сделать это?

1 ответ

У нас есть новая конечная точка службы GET, которая ожидает данные DateTime и Decimal,

Нет, не знаешь. Просто исправьте свою конечную точку:

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

Ну вот. Поскольку эта конечная точка вызывается другой компьютерной программой , задача этой программы состоит в том, чтобы убедиться, что их пользовательский ввод правильно передан в эти типы данных. Кто знает, есть ли у них вообще пользовательский ввод. Эта программа также может прочитать его из файла или базы данных.

C# — строго типизированный язык. Не превращайте его в язык со строковой типизацией , используя анти-шаблоны кодирования.

Другие вопросы по тегам