var original = "АБ";
var query = HttpUtility.ParseQueryString("");
query["Arg"] = original;
var tmp1 = query.ToString();
上面的代码(建议构建查询字符串的方法)将参数编码为Arg=%u0410%u0411
但是,目标API不接受此参数,并要求以这种方式对其进行编码:Arg=%D0%90%D0%91
是否可以使HttpValueCollection使用此编码?
答案 0 :(得分:1)
HttpValueCollection的源代码中有一条注释可以解释您的问题:
// DevDiv #762975: <form action> and other similar URLs are mangled since we use non-standard %uXXXX encoding.
// We need to use standard UTF8 encoding for modern browsers to understand the URLs.
https://referencesource.microsoft.com/#System.Web/HttpValueCollection.cs,9938b1dbd553e753,references
看起来可以使用web.config中的appSetting控制此行为。要获得您想要的行为,请添加以下内容:
<add key="aspnet:DontUsePercentUUrlEncoding" value="true" />
如果您的目标是.NET 4.5.2+,则默认情况下此值应设置为true。
您可以在System.Net.Http
命名空间中的FormUrlEncodedContent 类中使用。以下是您可以执行此操作的示例:
string query;
using (var content = new FormUrlEncodedContent(new KeyValuePair<string, string>[]{
new KeyValuePair<string, string>("Arg", "АБ")
}))
{
query = content.ReadAsStringAsync().Result;
}
Console.WriteLine(query);
此外,您可以谷歌“查询字符串构建器c#”解决其他人提出的解决方案。
答案 1 :(得分:0)