簡體   English   中英

建立httpheader連接:保留小寫的“保持活動”狀態

[英]Make httpheader Connection: Keep-Alive into lower-case “keep-alive”

我嘗試添加新標頭的內容:

request.Headers.GetType().InvokeMember("ChangeInternal",
    BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.InvokeMethod,
    Type.DefaultBinder, request.Headers, new object[] { "Connection", "keep-alive" }
);

實際上,它在Connection中添加了keep-alive標頭,但並沒有替代舊的標頭。 所以我得到了Connection: Keep-Alive,keep-alive

我嘗試了反射實驗,但沒有任何效果。

還有其他類似的問題,但是沒有解決方案。

只需執行以下操作:

request.Headers.Remove("Connection");
request.Headers.Add("Connection", "keep-alive");

無需通過反射設置這些標頭。 首先,刪除舊條目很重要,因為如果鍵已經存在,則對Add的調用會Add另一個值(用逗號分隔的值看到的結果)。

最好使用HttpRequestHeader枚舉而不是標頭名稱作為字符串:

request.Headers.Remove(HttpRequestHeader.Connection);
request.Headers.Add(HttpRequestHeader.Connection, "keep-alive");

編輯:

我的錯。 在這種情況下,必須使用request對象上的顯式Connection屬性:

request.Connection = "keep-alive";

僅供參考:還有更多標頭必須通過其顯式屬性進行設置。 有關列表,請參見此頁面的部分說明https : //msdn.microsoft.com/zh-cn/library/System.Net.HttpWebRequest%28v=vs.110%29.aspx

EDIT2:

好了,查看connection屬性的源代碼 ,您可以看到它限制了這些值的設置:

bool fKeepAlive = text.IndexOf("keep-alive") != -1;
bool fClose = text.IndexOf("close") != -1;
if (fKeepAlive || fClose)
{
    throw new ArgumentException(SR.GetString("net_connarg"), "value");
}

因此,您有2個選擇:

  1. 用大寫的值(我喜歡)堅持作為反正你有這方面是小寫沒有真正的理由(“所以我想到底有沒有標頭,我的例如Firefox瀏覽器。”)。 而且正如Darin Dimitrov所述,標頭無論如何都不應該區分大小寫。
  2. 以這種方式擴展反射方法,首先刪除標題,然后再次將其設置為小寫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM