Sử dụng suy nghi, đây là những gì các phương pháp TryAddWithoutValidation làm nội bộ:
if (!this.TryCheckHeaderName(name))
{
return false;
}
if (value == null)
{
value = string.Empty;
}
AddValue(this.GetOrCreateHeaderInfo(name, false), value, StoreLocation.Raw);
return true;
Công việc xảy ra bên trong TryCheckHeaderName()
chức năng.
Nó sẽ kiểm tra xem tên có rỗng hay không và liệu nó có phù hợp với RFC cho giao thức HTTP không (nghĩa là nó không chứa ký tự không hợp lệ, v.v.), kiểm tra tiêu đề trước một tập hợp không được phép tiêu đề.
Đây là mã nguồn:
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;
}
Ngược lại các Thêm phương pháp có hành vi tương tự với ngoại lệ (ý định chơi chữ) mà nó ném một ngoại lệ trong trường hợp tên tiêu đề không bất kỳ một trong các điều kiện trong hàm TryCheckHeaderName
.
Nguồn
2013-02-20 21:56:05
Điều này không chính xác. TryAddWithoutValidation sẽ thành công và trả về true trên một số đầu vào mà Add sẽ ném một ngoại lệ trên – Gilthans
@Gilthans Tôi đã tìm thấy bình luận của bạn có giá trị hơn nếu bạn đã minh họa cho xác nhận của mình. –
Tôi nhớ một cách sống động trải qua một trường hợp Add sẽ thất bại và TryAddWithoutValidation sẽ thành công, và bây giờ tôi muốn tôi đăng mã ... Tôi tin rằng nó đã làm với việc thêm tiêu đề đó là không hợp lệ cho một số HttpMethod – Gilthans