2017-07-30 74 views
0

我試圖篩選我的頭的名單,是由Request.Headers返回:如何從請求中過濾HttpRequestHeaders的過濾列表?

var validHeaders = (HttpRequestHeaders)Request.Headers.Where(header => ValidHeaders.List.Contains(header.Key.ToUpper())); 

enter image description here

我得到以下異常:

System.InvalidCastException:「無法類型 的投射對象'WhereEnumerableIterator 1[System.Collections.Generic.KeyValuePair 2 [System.String,System.Collections.Generic.IEnumerable`1 [System.String]]]' 鍵入'Sy stem.Net.Http.Headers.HttpRequestHeaders「。

如何將Request.Headers.Where表達式轉換爲HttpRequestHeaders?

+1

當您應用'Where'子句時,它將更改爲枚舉並且不能被轉換爲'HttpRequestHeaders'類。你將不得不創建一個新的實例,遍歷已過濾的集合並將這些項目添加到新創建的實例中 – Nkosi

+0

你最終試圖做什麼。有一些代碼被彈出窗口阻止在圖像中,所以無法分辨。 – Nkosi

+0

我試圖從現有的請求中生成一個新的請求消息,但過濾掉了不在我的ValidHeaders靜態類列表中的頭文件 –

回答

3

當您應用Where子句時,它將返回枚舉IEnumerable<KeyValuePair<string, IEnumerable<string>>>,並且不能轉換爲HttpRequestHeaders類。您將不得不創建一個新實例,遍歷過濾後的集合並將這些項目添加到新創建的實例中。

var validHeaders = Request.Headers.Where(header => ValidHeaders.List.Contais(header.Key.ToUpper())); 
//create GET request 
var request = new HttpRequestMessage(HttpMethod.Get, uri); 
//Add the valid headers to the new request 
foreach(var header in validHeaders) { 
    request.Headers.Add(header.Key, header.Value); 
}