FormUrlEncodedContent可以工作,但StringContent不行。
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无法工作。
这是我的代码:
Dictionaryparameters = 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无法处理它。
请帮帮我
非常感谢!
问题:为什么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的库来解决问题。