正确的内容类型标题是我正在使用带有UTF8编码的Webclient上传url编码的字符串

时间:2016-08-03 12:38:43

标签: asp.net .net encoding utf-8 character-encoding

我正在开发一个asp.net MVC Web应用程序,我正在与第三方API集成。现在是第三方API,JSON对象需要以下内容: -

  • 对json对象进行URL编码。能够传递500%600123%456 ...
  • 等值
  • 使用UTF8编码能够传递非{ASCII}字符,例如£¬ ..

所以我有以下WebClient() UploadString()方法,它将对传递的json对象进行url编码并定义UTF8编码: -

using (WebClient wc = new WebClient()) 
                {
                    string url = currentURL + "resources?AUTHTOKEN=" + pmtoken;
                    Uri uri = new Uri(url);
                    wc.Encoding = System.Text.Encoding.UTF8;
                    wc.Headers.Add(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");

                    var urlencodedData= HttpUtility.UrlEncode(data);
                    crudoutput = wc.UploadString(uri, "INPUT_DATA=" +urlencodedData );
                }

所以在我的情况下,我使用url编码数据和UTF8编码..所以不知道为什么内容类型标题我应该使用?是我正确使用的那个: -

"application/x-www-form-urlencoded");

或者我需要在其中指定UTF8编码吗?

1 个答案:

答案 0 :(得分:1)

传输编码已使用Web客户端的Encoding属性设置。但是,某些UTF-8特定字符可能需要基于编码的特定转换。因此,UrlEncode方法具有接受编码的重载。

你只需使用这样的方法:

var urlencodedData = HttpUtility.UrlEncode(data, System.Text.Encoding.UTF8);

您选择的内容类型仅控制内容有效内容的解释方式。如果您想使用带有URL编码值的键值和值对,application/x-www-form-urlencoded是您应该使用的内容类型。

如果您想传输JSON有效负载,则应使用RFC 4627指定的内容类型application/json。如果您选择这样做,您可以省略URL编码和"INPUT_DATA="