Как веб-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# — строго типизированный язык. Не превращайте его в язык со строковой типизацией , используя анти-шаблоны кодирования.