在C#中使用HttpWebRequest发布多部分表单以模拟curl

在C#中使用HttpWebRequest发布多部分表单以模拟curl,c#,node.js,xamarin.ios,multipartform-data,express,C#,Node.js,Xamarin.ios,Multipartform Data,Express,我正在尝试将monotouch中的UIImage上载到我的服务器(nodeJS) 我尝试了在SO和网上其他地方找到的所有可能的解决方案,但都没有结果 基本上,我有一个UIImage,我正在使用以下方法将其转换为字节[]: public byte[] GetMergedBytes(UIImage img) { byte[] filedata = null; using (NSData imageData = img.AsPNG()) {

我正在尝试将monotouch中的UIImage上载到我的服务器(nodeJS)

我尝试了在SO和网上其他地方找到的所有可能的解决方案,但都没有结果

基本上,我有一个UIImage,我正在使用以下方法将其转换为字节[]:

public byte[] GetMergedBytes(UIImage img)
    {
        byte[] filedata = null;
        using (NSData imageData = img.AsPNG()) {
            filedata = new byte[imageData.Length];
            System.Runtime.InteropServices.Marshal.Copy (imageData.Bytes, filedata, 0, Convert.ToInt32 (imageData.Length));
        }

        return filedata;
    }
然后,我使用各种不同的方法将其发布到我的服务器,包括:

当我尝试使用CURL时,我的服务器会正确响应:

curl  -F "fileupload=@logo.png" -F "name=blah" http://xxx.xxx.xxx.xx/upload
最后,我将nodeJS与expressJS结合使用:

app.post('/upload', function(req, res, files) {
console.log(req.files);
console.log(files);
}
使用CURL,我从服务器上的console.log获得以下信息:

{ fileupload: 
  { domain: null,
   _events: null,
   _maxListeners: 10,
   size: 88270,
   path: '/tmp/9ab5c9b1ea6da91e4e16ea711636b9bb',
   name: 'logo.png',
   type: 'application/octet-stream',
   hash: false,
   lastModifiedDate: Thu Jan 31 2013 07:26:43 GMT+0000 (UTC),
   _writeStream: 
   { domain: null,
    _events: null,
    _maxListeners: 10,
    path: '/tmp/9ab5c9b1ea6da91e4e16ea711636b9bb',
    fd: 9,
    writable: false,
    flags: 'w',
    encoding: 'binary',
    mode: 438,
    bytesWritten: 88270,
    busy: false,
    _queue: [],
    _open: [Function],
    drainable: true },
  length: [Getter],
  filename: [Getter],
  mime: [Getter] } }
对于任何其他方法,相同的
console.log
返回:

{}
有什么想法吗?我都快疯了

更新

修好了。我现在使用的是RestSharp,它就像一个魔咒,只需要很少的代码行

byte[] filedata = GetFileBytes(file);
var client = new RestClient ("http://server");

var request = new RestRequest ("upload", Method.POST);
        request.AddParameter("name", "parameter1);
        request.AddParameter("name2", id);
        request.AddFile("file", filedata, "somename.png", "image/png");

        RestResponse response = (RestResponse)client.Execute(request);
        var content = response.Content;

        return content;
    byte[] filedata = GetFileBytes(file);
    var client = new RestClient ("http://server");

    var request = new RestRequest ("upload", Method.POST);
    request.AddParameter("name", "parameter1);
    request.AddParameter("name2", id);
    request.AddFile("file", filedata, "somename.png", "image/png");

    RestResponse response = (RestResponse)client.Execute(request);
    var content = response.Content;

    return content;
更新

修好了。我现在使用的是RestSharp,它就像一个魔咒,只需要很少的代码行

byte[] filedata = GetFileBytes(file);
var client = new RestClient ("http://server");

var request = new RestRequest ("upload", Method.POST);
        request.AddParameter("name", "parameter1);
        request.AddParameter("name2", id);
        request.AddFile("file", filedata, "somename.png", "image/png");

        RestResponse response = (RestResponse)client.Execute(request);
        var content = response.Content;

        return content;
    byte[] filedata = GetFileBytes(file);
    var client = new RestClient ("http://server");

    var request = new RestRequest ("upload", Method.POST);
    request.AddParameter("name", "parameter1);
    request.AddParameter("name2", id);
    request.AddFile("file", filedata, "somename.png", "image/png");

    RestResponse response = (RestResponse)client.Execute(request);
    var content = response.Content;

    return content;

我还使用了流行的:您可以将更新移动到答案中,并将您的问题标记为已回答(在stackoverflow上回答您自己的问题完全可以,请参阅常见问题)。这样,搜索类似问题的其他人将看到答案可用(因此,这样更有帮助)。欢迎来到SO!