如何在C#中编码自定义HTTP标头

是否有类似于HttpUtility的类来编码自定义标头的内容? 理想情况下,我希望保持内容可读。

您可以在.NET Framework 4.0及更高版本中使用HttpEncoder.HeaderNameValueEncode方法 。

对于以前版本的.NET Framework,您可以使用HttpEncoder.HeaderNameValueEncode参考页面上记录的逻辑来滚动自己的编码器:

  • Unicode值小于ASCII字符32的所有字符(ASCII字符9除外)都被URL编码为%NN格式,其中N个字符表示hex值。

  • ASCII字符9(水平制表符)不是URL编码的。

  • ASCII字符127编码为%7F。

  • 所有其他字符均未编码。

更新:

正如OliverBock指出的那样,HttpEncoder.HeaderNameValueEncode方法受到保护并且是内部的。 我去了开源Mono项目并找到了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; } 

仅供参考

[here]( https://github.com/mono/mono/blob/master/mcs/class/System.Web/System.Web.Util/HttpEncoder.cs

对我来说帮助了Uri.EscapeDataString(headervalue)

这与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); } 

Mayeb这一个? UrlEncodefunction

抱歉它不在我的头顶但是对于你的请求对象,应该有一个你可以添加的头文件对象。

即request.headers.add(“blah”);

多数民众赞成,但它应该指向正确的方向。