2013-02-20 51 views

Trả lời

8

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.

+0

Đ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

+0

@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. –

+0

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

1

TryAddWithoutValidation không cố gắng phân tích giá trị được cung cấp để xem liệu giá trị có hợp lệ hay không (ví dụ: "loại" hợp lệ của giá trị hoặc nhiều giá trị cho một tiêu đề giá trị đơn). Add trước tiên phân tích cú pháp giá trị để thực hiện các kiểm tra đã đề cập trước đó trước khi thử thêm giá trị tiêu đề

Các vấn đề liên quan