Вот что отправляется с сервера клиенту:
public class BattleHub : Hub
{
public override async Task OnConnectedAsync()
{
await Clients.Client(Context.ConnectionId).SendAsync("ConfigurationInfo",
new Dictionary<string, string> { { "WtF", "WtF" } });
await base.OnConnectedAsync();
}
}
Вот что получает клиент:
{"wtF":"WtF"}
О чем свидетельствует следующий клиентский код:
const battle_connection = new signalR.HubConnectionBuilder().withUrl("/battlehub").build()
battle_connection.on("ConfigurationInfo", (bigDict) => {
window.alert(JSON.stringify(bigDict))
})
Заметили изменение регистра в первой букве словарного ключа? Предполагалось, что будет отправлено "WtF", но вместо этого было отправлено "wtF".
Почему это происходит? Есть ли способ предотвратить это?
Любопытно, что это происходит только со словарными ключами: как видите, значения остаются неизменными. Кроме того, отправка только одной строки, не заключенной в словарь, не приводит к тому, что первая буква преобразуется в нижний регистр. List<string>
также отправляется правильно.
Здесь действительно имеет значение регистр всех букв всех клавиш, поэтому приложение будет ошибаться, если какая-либо из них будет принудительно преобразована в нижний регистр! Хотя, конечно, мы можем придумать множество более или менее уродливых способов обойти эту проблему, но есть ли способ отключить это преобразование в сериализаторе SignalR?
ASP.NET Core 2.1