2013-02-20 20 views

risposta

8

Utilizzando riflettore, questo è ciò che il metodo TryAddWithoutValidation fa internamente:

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

Il lavoro avviene all'interno della funzione TryCheckHeaderName().

Si riduce a verificare se il nome non è nullo e se corrisponde all'RFC per il protocollo HTTP (cioè non contiene caratteri non validi ecc.) E controlla l'intestazione con un set di non consentito intestazioni.

Ecco il codice sorgente:

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

In contrasto con il metodo Aggiungi ha un comportamento simile con il eccezione (gioco di parole) che viene generata un'eccezione nel caso in cui il nome di intestazione non uno qualsiasi dei le condizioni nella funzione TryCheckHeaderName.

+0

Questo non è corretto. TryAddWithoutValidation avrà esito positivo e restituirà true su qualche input che Add genererà un'eccezione su – Gilthans

+0

@Gilthans. Avrei trovato il tuo commento più prezioso se avessi esemplificato la tua affermazione. –

+0

Ricordo vividamente un caso in cui Add fallirebbe e TryAddWithoutValidation avrebbe avuto successo, e ora vorrei aver postato il codice ... Credo che avesse a che fare con l'aggiunta dell'intestazione che non è valida per alcuni HttpMethod – Gilthans

1

TryAddWithoutValidation non tenta di analizzare il valore che viene fornito per vedere se è valido (ad esempio valido "tipo" di valore o più valori per un'intestazione a valore singolo). Add prima analizza il valore per eseguire i controlli precedentemente menzionati prima di provare ad aggiungere il valore dell'intestazione