Итак, в классе HttpHeaders
при вызове DefaultRequestHeaders.Add
он вызывает закрытый метод с именем CheckHeaderName
.
.
Внутри этого он выполняет проверку по ключу заголовка в вашем случае (request-target)
.
Сначала он проверяет, пусто ли оно, затем проверяет что-то, что называется TokenLength
. По сути, эта проверка проходит через каждый символ ключа заголовка и проверяет набор TokenChars
. Следующие char
s не разрешены:
40
41
60
62
64
44
59
58
92
34
47
91
93
63
61
123
125
И символы (
и )
оба равны 40
и 41
.
Похоже, что он встроен в .Net framework, что ключ заголовка не разрешен ни для одного из вышеперечисленных символов.
Чек TokenLength
также вызывается при вызове TryAddWithoutValidation
. TryAddWithoutValidation
также возвращает bool, если заголовок был добавлен в коллекцию, так что вы можете использовать его в коде, чтобы увидеть, был ли он добавлен.
Примечание: это было проверено на .Net Framework 4.7.2
Обновление:
Поскольку легче просматривать исходный код .Net Core, я также посмотрел, не изменилось ли что-нибудь, и это почти такая же логика.
Здесь вы можете увидеть запрещенные значения здесь
Он проверяет, имеет ли ключ заголовка значение здесь , которое вызывается с здесь , так как он вернет false, поскольку содержит недопустимые символы, исключение будет выдано.