【发布时间】:2019-12-03 14:19:46
【问题描述】:
我正在使用xamarin表单制作一个跨平台的应用程序,我需要在后台制作Http post。
我设法通过前台服务和 Android 中的 HttpClient 做到了这一点。
我无法在 IOS 中执行此操作,我正在使用 NSUrlSession 执行后台任务。
我可以通过
进行 POSTapplication/x-www-form-urlencoded; charset=UTF-8 as a Content-Type.
但我无法使用多部分表单数据来做到这一点。
我在某处读到我必须自己构建请求的主体,所以我使用了一些快速而客观的 C 语言翻译,但没有成功。
我尝试将 answer 中的这个目标 c 代码转换为 c#,我最终得到了这个代码,但它不起作用,请帮助!
using (var url = NSUrl.FromString(UploadUrlString))
using (var request = new NSMutableUrlRequest(url))
{
string boundaryConstant = "------WebKitFormBoundaryXXXXXXXXXX";
request.HttpMethod = "POST";
request["Cookie"] = "SERVERIDXXX=XXXXXX";
var data = NSData.FromArray(ImageByteArray);
var uiimage = UIImage.LoadFromData(data);
NSData img = uiimage.AsJPEG(1);
string Body = boundaryConstant+ "\r\n";
Body += "Content-Disposition: form-data; name=\"id\"\r\n\r\n";
//Body += StaticData.Photos[0].Round;
Body += 50000+ "\r\n";
Body += boundaryConstant + "\r\n";
Body += "Content-Disposition: form-data; name=\"upload_file\"; filename=\"Untitled.png\"\r\n";
Body += "Content-Type: image/png\r\n\r\n";
Body+=img+ "\r\n";
Body += boundaryConstant + "--";
request.Body = NSData.FromString(Body);
request["Content-Type"] = "multipart/form-data; boundary="+ boundaryConstant;
NSUrlSessionDownloadTask downloadTask = session.CreateDownloadTask(request);
downloadTask.Resume();
}
【问题讨论】:
-
嗨,你解决了这个问题吗,你可以显示一些有问题的错误日志信息。
-
不,我没有服务器响应是:500 internal server error。
-
好的,你可以试试邮递员来请求这个网址内容吗,这将是检查问题所在的好方法。
-
我真的不知道如何用邮递员测试这段代码,我正在发送一个字节数组......,但是用上传进行测试当然可以
-
可能问题出在字节数组上,你用字符串 data 添加 img 数据,最后将其转换为 NSData 。这个数据类型不能在http中使用,你应该检查web api的请求,并修改为它的请求。
标签: c# ios objective-c xamarin.forms nsurlsession