是否有類似於HttpUtility的類來對自定義標頭的內容進行編碼?理想情況下,我想保持內容的可讀性。如何在C#中編碼自定義HTTP標頭?
回答
對不起,它關閉我的頭頂,但對於您的請求對象應該有一個標題對象,你可以添加到。
即request.headers.add(「blah」);
這不是現貨,但它應該指向正確的方向。
問題是關於編碼標頭值,而不是添加標頭。 – 2012-06-08 20:28:54
您可以在.NET Framework 4.0及更高版本中使用HttpEncoder.HeaderNameValueEncode Method。
所有字符,其Unicode值小於ASCII字符32:
對於.NET Framework的早期版本中,你可以推出自己的編碼器,使用邏輯HttpEncoder.HeaderNameValueEncode參考頁面上指出, (ASCII字符9除外)均以URL編碼爲%NN格式,其中N個字符表示十六進制值。
ASCII字符9(水平製表符)不是URL編碼的。
ASCII字符127被編碼爲%7F。
所有其他字符不編碼。
更新:
由於OliverBock指出HttpEncoder.HeaderNameValueEncode方法是受保護和內部。我去開源Mono項目,發現單的實現
void HeaderNameValueEncode (string headerName, string headerValue, out string encodedHeaderName, out string encodedHeaderValue)
{
if (String.IsNullOrEmpty (headerName))
encodedHeaderName = headerName;
else
encodedHeaderName = EncodeHeaderString (headerName);
if (String.IsNullOrEmpty (headerValue))
encodedHeaderValue = headerValue;
else
encodedHeaderValue = EncodeHeaderString (headerValue);
}
static void StringBuilderAppend (string s, ref StringBuilder sb)
{
if (sb == null)
sb = new StringBuilder (s);
else
sb.Append (s);
}
static string EncodeHeaderString (string input)
{
StringBuilder sb = null;
for (int i = 0; i < input.Length; i++) {
char ch = input [i];
if ((ch < 32 && ch != 9) || ch == 127)
StringBuilderAppend (String.Format ("%{0:x2}", (int)ch), ref sb);
}
if (sb != null)
return sb.ToString();
return input;
}
僅供參考
[這裏](https://github.com/mono/mono/blob/master/mcs/class/System.Web/System.Web.Util/HttpEncoder.cs)
HeaderNameValueEncode()是受保護的+內部的。 – 2013-12-12 05:36:37
@OliverBock你是對的,更新了帖子。 – liuhongbo 2013-12-12 18:36:29
不幸的是,這個版本和.NET版本(通過Reflector看到)都不能正確編碼數據中已有的'%'字符。 – 2013-12-12 21:19:26
這做同樣的工作作爲HeaderNameValueEncode(),也將編碼%字符,以便後面可以可靠地解碼標題。
static string EncodeHeaderValue(string value)
{
return Regex.Replace(value, @"[\u0000-\u0008\u000a-\u001f%\u007f]", (m) => "%"+((int)m.Value[0]).ToString("x2"));
}
static string DecodeHeaderValue(string encoded)
{
return Regex.Replace(encoded, @"%([0-9a-f]{2})", (m) => new String((char)Convert.ToInt32(m.Groups[1].Value, 16), 1), RegexOptions.IgnoreCase);
}
對我幫助Uri.EscapeDataString(headervalue)
- 1. 如何geenrate或自定義HTTP標頭
- 2. 自定義HTTP標頭UIWebview
- 3. 自定義http標頭
- 4. redirect_to自定義http標頭
- 5. 在Django自定義HTTP標頭
- 6. 如何在fiddler中查看ASP.NET自定義HTTP標頭?
- 7. 在HTTP請求中定義自定義用戶代理標頭?
- 8. SoapClient設置自定義HTTP標頭
- 9. 使用Commons HTTPClient自定義HTTP標頭?
- 10. 自定義HTTP授權標頭
- 11. SDWebImage並設置自定義HTTP標頭?
- 12. Akka Http客戶端:自定義標頭
- 13. 使用XmlRpcClient自定義HTTP標頭
- 14. apache2模塊自定義http標頭
- 15. 自定義目標c類不編碼
- 16. HTTP Base64編碼的標頭
- 17. 在swift中發送自定義HTTP頭
- 18. 自定義HTTP請求頭
- 19. 如何使用`:`在tornadoweb http請求對象中編碼標頭
- 20. 如何使用自定義標頭髮送HTTP刪除請求?
- 21. 如何實現自定義HTTP標頭RESTKit
- 22. JMeter - 在HTTPSampler中以編程方式添加自定義HTTP頭
- 23. 如何在發佈請求時在HTTP標頭中設置自定義變量
- 24. 在web.py中獲取自定義HTTP請求標頭?
- 25. 在Angular 2中讀取自定義HTTP響應標頭
- 26. 我可以在HTTP標頭中傳遞自定義數據嗎?
- 27. 在PHP中設置LiteSpeed的自定義HTTP響應標頭
- 28. 使用PHP在調用soap中添加自定義HTTP標頭
- 29. 是否有可能在WebView中設置自定義HTTP標頭
- 30. 自定義SOAP標頭如何與自定義WCF標頭相關聯?
你到底是什麼意思? – SLaks 2010-05-04 21:29:30