2013-02-20 10 views

Antwort

8

Reflektor, das ist, was die TryAddWithoutValidation Methode intern tut:

if (!this.TryCheckHeaderName(name)) 
{ 
    return false; 
} 
if (value == null) 
{ 
    value = string.Empty; 
} 
AddValue(this.GetOrCreateHeaderInfo(name, false), value, StoreLocation.Raw); 
return true; 

Die Arbeit geschieht im Inneren der TryCheckHeaderName() Funktion.

Es läuft darauf hinaus, zu prüfen, ob der Name nicht null ist und ob es entspricht den RFC für das HTTP-Protokoll sowie die Überprüfung des Kopfes gegen einen Satz von (dh es keine ungültigen Zeichen usw. enthält)-nicht erlaubt Kopfzeilen.

Hier ist der Source-Code:

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; 
} 

Im Gegensatz die hinzufügen Methode eines ähnliches Verhalten mit dem Ausnahme (Wortspiel beabsichtigt) hat, dass es eine Ausnahme für den Fall, wirft nicht der Header-Name einer der die Bedingungen in der TryCheckHeaderName Funktion.

+0

Dies ist falsch. TryAddWithoutValidation wird erfolgreich sein und bei einigen Eingaben true zurückgeben, dass Add eine Ausnahme auf – Gilthans

+0

@Gilthans wirft. Ich hätte meinen Kommentar wertvoller gefunden, wenn Sie Ihre Behauptung beispielhaft dargestellt hätten. –

+0

Ich erinnere mich lebhaft erleben einen Fall, wo Add fehlschlagen würde und TryAddWithoutValidation würde erfolgreich sein, und ich wünsche jetzt, dass ich den Code geschrieben ... Ich glaube, es hatte mit Header hinzufügen, die für einige HttpMethod ungültig ist – Gilthans

1

TryAddWithoutValidation versucht nicht, den angegebenen Wert zu analysieren, um festzustellen, ob es gültig ist (z. B. gültiger "Typ" des Werts oder mehrere Werte für einen einwertigen Header). Add analysiert zuerst den Wert, um die zuvor erwähnten Überprüfungen durchzuführen, bevor Sie versuchen, den Headerwert hinzuzufügen