2013-02-20 3 views
5

В пространстве имен System.Net.Http.Headers в чем разница между HttpHeaders.TryAddWithoutValidation и HttpHeaders.Add?Какова цель HttpHeaders.TryAddWithoutValidation?

В частности, что такое проверка при вызове метода Add? В документации для Add() просто указано:

«Значение заголовка будет проанализировано и проверено».

ответ

8

Используя отражатель, это то, что метод 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.

+0

Это неверно. TryAddWithoutValidation будет успешным и вернет true для некоторого ввода, который добавит исключение в – Gilthans

+0

@Gilthans. Я бы счел ваш комментарий более ценным, если бы вы продемонстрировали свое утверждение. –

+0

Я помню, как яростно переживал случай, когда Add не удался, и TryAddWithoutValidation удастся, и теперь я хочу, чтобы я разместил код ... Я считаю, что это связано с добавлением заголовка, который недопустим для некоторого HttpMethod – Gilthans

1

TryAddWithoutValidation не пытается проанализировать значение, которое оно задает, чтобы увидеть, действительно ли оно (например, действительный «тип» значения или несколько значений для заголовка с одним значением). Add сначала анализирует значение для выполнения ранее упомянутых проверок, прежде чем пытаться добавить значение заголовка

Смежные вопросы