Asp.net
為什麼從 ASP.NET Web API 中的請求中剝離內容範圍標頭?
我正在創建一個 API,可以在其中以分塊方式上傳文件。
通過這個Stackoverflow question and answer,內容範圍標題似乎最適合這個。
但是,在控制器操作中,標題已被剝離,因此我無法訪問它。當我使用“範圍”標頭時,它在請求標頭集合中可用。
有人知道為什麼從請求中刪除 Content-Range 嗎?
它沒有被剝離。在 Request.Content.Headers 中查找它。看起來他們將標頭與 HTTP/1.1 規範對齊——將實體標頭移動到 Request.Content.Headers。
我在一個範例請求中進行了嘗試,並在那裡找到了它。
在閱讀了RFC 2616的相關部分後,我發現了這個變化。我最近一直在討論它,因為主要作者 Fielding 也是 REST 架構風格的發明者,我正在嘗試使用 ASP.NET Web API 來遵循這種風格。
我意識到“請求”、“響應”、“一般”(用於請求和響應但與實體無關)和“實體”標頭之間存在區別。
看起來 ASP.NET 團隊修改了類模型以更好地反映 RFC,創建了 HttpHeaders 的三個子類:
- “5.3 請求頭欄位”和“4.5 通用頭欄位”的 HttpRequestHeaders
- “6.2 響應頭欄位”和“4.5 通用頭欄位”的 HttpResponsHeaders
- “7.1 實體標頭欄位”的 HttpContentHeaders
這些是 MSDN 中三個類的逐字描述(連結是我的):
- HttpRequestHeaders:表示RFC 2616 中定義的請求標頭的集合。
- HttpResponseHeaders:表示RFC 2616 中定義的響應標頭的集合。
- HttpContentHeaders:表示RFC 2616 中定義的內容標頭的集合。Content-Range 是一個Entity Header,所以ContentRange 在HttpContentHeaders 中。
請注意,雖然 MSDN 類描述有點錯誤 - RFC 中沒有 Content Headers 定義,但很明顯它們的意思是 Entity Headers。