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
.
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
@ Gilthans Chciałbym, aby Twój komentarz był bardziej wartościowy, gdybyś przedstawił swoje twierdzenie. –
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