Equivalent of “curl -F” parameter for System.Net.Http.MultipartFormDataContent?

扶醉桌前 提交于 2019-12-05 11:57:09

Thanks to @bzlm, using Fiddler I managed to track what was missing :

  • Content disposition
  • Content type

And these needed to be set on streamContent rather than content.

public async Task<HttpResponseMessage> Post(string id, string fileName)
{
    string url = string.Format("http://api.sonicapi.com/file/upload?access_id={0}", id);
    var stream = new FileStream(fileName, FileMode.Open);
    string name = Path.GetFileName(fileName);

    var client = new HttpClient { Timeout = TimeSpan.FromMinutes(10) };

    var streamContent = new StreamContent(stream);
    streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
    streamContent.Headers.ContentDisposition.Name = "\"file\"";
    streamContent.Headers.ContentDisposition.FileName = "\"" + name + "\"";
    streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

    var content = new MultipartFormDataContent { streamContent };
    HttpResponseMessage message = await client.PostAsync(url, content);
    string s = await message.Content.ReadAsStringAsync();
    return message;
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!