FormUrlEncodedContent可以工作,但StringContent不行。

6 浏览
0 Comments

FormUrlEncodedContent可以工作,但StringContent不行。

我对这两个httpcontents有一个问题。

我做了一个Webapi(php),从这里复制:http://www.9lessons.info/2012/05/create-restful-services-api-in-php.html

我重用了Rest.inc.php,并实现了自己的api文件。

我试图从.Net(我是.Net开发人员)中调用此api - 一个简单的WinForm应用程序 - FormUrlEncodedContent可以工作,但StringContent无法工作。

这是我的代码:

Dictionary parameters = new Dictionary();
        parameters.Add("username", username);
        parameters.Add("title", title);
        parameters.Add("text", text);
        var jsonString = JsonConvert.SerializeObject(parameters);
        var content = new StringContent(jsonString, Encoding.UTF8, "text/json");
        //var content = new FormUrlEncodedContent(parameters);
        PostData(url, content);

我想使用StringContent的原因是:在真实数据中,有时参数会包含一个byte[](照片),而FormUrlEncodedContent无法处理它。

请帮帮我

非常感谢!

0
0 Comments

问题:为什么FormUrlEncodedContent可以正常工作,而StringContent却不行?

原因:这两种格式是非常不同的。如果API没有像Asp.Net Web API那样智能的模型绑定器,那么StringContent将无法正常工作。你可以将字节数组进行base64编码,这是通过HTTP传输字节的典型方式。

解决方法:使用JSON或表单编码,你都需要更改你的PHP服务。你可以使用适用于处理JSON的库来解决问题。

在使用HTTP进行传输时,有时我们会遇到一些奇怪的问题。比如,为什么使用FormUrlEncodedContent可以正常工作,而使用StringContent却不行呢?

原因是这两种格式是非常不同的。如果API没有像Asp.Net Web API那样智能的模型绑定器,那么StringContent将无法正常工作。这时,我们可以考虑将字节数组进行base64编码,这是通过HTTP传输字节的典型方式。

某些情况下,如果使用FormUrlEncodedContent的话,会出现URI太长的问题。这时,可以尝试使用StringContent,因为有人在stackoverflow.com上提到了这个问题。

但是,无论是使用JSON还是表单编码,你都需要更改你的PHP服务。虽然我不是PHP开发人员,但我确定有一些适用于处理JSON的库可以帮助你解决问题。

总结一下,为了解决这个问题,你可以使用FormUrlEncodedContent或StringContent进行HTTP传输,但需要注意它们的区别,并根据实际情况进行选择和调整。如果遇到问题,可以尝试使用base64编码字节数组或查找适用于处理JSON的库来解决问题。

0