2012-10-29 25 views
12

Tôi đang tạo API trong đó có thể tải lên tệp theo cách chunked.Tại sao tiêu đề phạm vi nội dung bị tước khỏi các yêu cầu trong ASP.NET Web API?

Đi theo điều này Stackoverflow question and answer, tiêu đề phạm vi nội dung có vẻ phù hợp nhất cho việc này.

Tuy nhiên, trong hành động của bộ điều khiển, tiêu đề đã bị xóa nên tôi không thể truy cập vào nó. Khi tôi sử dụng tiêu đề 'phạm vi', nó có sẵn trong bộ sưu tập tiêu đề yêu cầu.

Bất kỳ ai có ý tưởng tại sao Phạm vi nội dung bị xóa khỏi Yêu cầu?

Trả lời

8

Nó không bị tước bỏ. Hãy tìm nó trong Request.Content.Headers. Dường như họ đã căn chỉnh các tiêu đề với các đặc tả HTTP/1.1 - di chuyển các Header Entity đến Request.Content.Headers.
Tôi đã thử nó trong một yêu cầu mẫu và tìm thấy nó ở đó.

Tôi đã tìm thấy thay đổi này sau khi đọc các phần có liên quan của RFC 2616. Tôi đã đi qua nó gần đây bởi vì tác giả chính, Fielding, cũng là nhà phát minh ra phong cách kiến ​​trúc REST, và tôi đang cố gắng làm theo phong cách đó bằng cách sử dụng ASP.NET Web API.

Tôi nhận thấy rằng có sự khác biệt giữa "yêu cầu", "phản hồi", "chung" (được sử dụng cho cả yêu cầu và phản hồi nhưng không phải là thực thể có liên quan) và tiêu đề "thực thể".

Trông như thể đội ASP.NET sửa đổi mô hình lớp học để phản ánh tốt hơn RFC, tạo ra ba lớp con của HttpHeaders:

  • HttpRequestHeaders cho "5.3 Tiêu đề yêu cầu Fields" và "4.5 chung Tiêu đề Fields"
  • HttpResponsHeaders cho "6.2 đáp ứng Tiêu đề Fields" và "4.5 chung Tiêu đề Fields"
  • HttpContentHeaders cho "7.1 Entity Tiêu đề Fields"

Đây là những miêu tả chính xác ba lớp trong MSDN (các liên kết là của tôi):

Lưu ý, mặc dù mô tả lớp MSDN hơi bị nhầm lẫn - không có định nghĩa Tiêu đề nội dung trong RFC, nhưng rõ ràng chúng có nghĩa là Tiêu đề thực thể.

+0

tìm tuyệt vời. Nó thực sự là ẩn giấu khéo léo. – Toad

+0

bạn có đồng ý rằng phạm vi nội dung là tiêu đề thích hợp để gửi các đoạn của tệp trong khi tải lên không? Tôi đã nghi ngờ giữa tiêu đề này và tiêu đề phạm vi. – Toad

+1

Tôi không có kinh nghiệm với điều này, nhưng từ đọc spec - có. Phạm vi là tiêu đề yêu cầu - dường như có nghĩa là yêu cầu phạm vi.Content-Range, là một Entity Header, có ý nghĩa trên một yêu cầu PUT (cho máy khách để nhận diện cho máy chủ một đoạn được gửi để thay thế một phần của tài nguyên hiện có) và trên một đáp ứng GET (cho máy chủ để xác định cho khách hàng mà chunk đang được trả lại). –

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