Используя отражатель, это то, что метод TryAddWithoutValidation делает внутренне:
if (!this.TryCheckHeaderName(name))
{
return false;
}
if (value == null)
{
value = string.Empty;
}
AddValue(this.GetOrCreateHeaderInfo(name, false), value, StoreLocation.Raw);
return true;
Работа происходит внутри функции TryCheckHeaderName()
.
Это сводится к проверке того, является ли имя не нулевым и соответствует ли оно RFC для протокола HTTP (то есть оно не содержит недопустимых символов и т. Д.), А также проверяет заголовок на набор не разрешен заголовки.
Вот исходный код:
bool TryCheckHeaderName(string name)
{
if (string.IsNullOrEmpty(name))
{
return false;
}
if (HttpRuleParser.GetTokenLength(name, 0) != name.Length)
{
return false;
}
if ((this.invalidHeaders != null) && this.invalidHeaders.Contains(name))
{
return false;
}
return true;
}
В отличие от метода Добавить имеет подобное поведение с исключения (каламбур), что он бросает исключение в случае, если имя заголовка терпит неудачу любой из условия в функции TryCheckHeaderName
.
Это неверно. TryAddWithoutValidation будет успешным и вернет true для некоторого ввода, который добавит исключение в – Gilthans
@Gilthans. Я бы счел ваш комментарий более ценным, если бы вы продемонстрировали свое утверждение. –
Я помню, как яростно переживал случай, когда Add не удался, и TryAddWithoutValidation удастся, и теперь я хочу, чтобы я разместил код ... Я считаю, что это связано с добавлением заголовка, который недопустим для некоторого HttpMethod – Gilthans