是否有类似于HttpUtility的类来编码自定义标头的内容?理想情况下,我希望保持内容可读。
答案 0 :(得分:9)
您可以使用.NET Framework 4.0及更高版本中的HttpEncoder.HeaderNameValueEncode Method。
对于以前版本的.NET Framework,您可以使用HttpEncoder.HeaderNameValueEncode参考页面上注明的逻辑来滚动自己的编码器:
Unicode值小于ASCII字符32的所有字符, 除了ASCII字符9之外,URL编码为%NN格式 N个字符代表十六进制值。
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)
答案 1 :(得分:4)
对我来说帮助了Uri.EscapeDataString(headervalue)
答案 2 :(得分:0)
这与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);
}
答案 3 :(得分:-1)
Mayeb这个? UrlEncode Function
答案 4 :(得分:-1)
抱歉它不在我的头顶但是对于你的请求对象,应该有一个可以添加的头文件对象。
即。 request.headers.add( “嗒嗒”);
这不是现场,但它应该指向正确的方向。