2013-02-20 39 views

Odpowiedz

8

Korzystanie reflektor, to jaka metoda TryAddWithoutValidation robi wewnętrznie:

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

Prace dzieje wewnątrz funkcji TryCheckHeaderName().

Sprowadza się do sprawdzenia, czy nazwa nie jest pusta i czy jest zgodna z RFC dla protokołu HTTP (tj. Nie zawiera żadnych nieprawidłowych znaków itp.), A także sprawdzenie nagłówka pod kątem zestawu nie jest dozwolone nagłówki.

Oto kod źródłowy:

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

Natomiast metoda Dodaj ma podobne zachowanie z wyjątków (gra słów nie przeznaczonych), która zgłasza wyjątek w przypadku, gdy nazwa nagłówka zawiedzie któregokolwiek z warunki w funkcji TryCheckHeaderName.

+0

To jest nieprawidłowe. TryAddWithoutValidation zakończy się sukcesem i zwróci wartość true w niektórych danych wejściowych, które Add rzuci wyjątek na – Gilthans

+0

@ Gilthans Chciałbym, aby Twój komentarz był bardziej wartościowy, gdybyś przedstawił swoje twierdzenie. –

+0

Pamiętam, jak żywo przeżywałem przypadek, w którym Add się nie udał, a TryAddWithoutValidation zakończyłoby się sukcesem, a teraz żałuję, że nie napisałem kodu ... Sądzę, że miało to związek z dodaniem nagłówka, który jest nieważny dla jakiegoś HttpMethod – Gilthans

1

TryAddWithoutValidation nie próbuje przeanalizować podanej wartości, aby sprawdzić, czy jest ona poprawna (np. Prawidłowy "typ" wartości lub wiele wartości dla nagłówka o pojedynczej wartości). Add najpierw analizuje wartość, aby wykonać poprzednio wymienione sprawdzenia przed próbą dodania wartości nagłówka