我有一个处理来自简单表单的上传的WebApi服务,如下所示:
<form action="/api/workitems" enctype="multipart/form-data" method="post">
<input type="hidden" name="type" value="ExtractText" />
<input type="file" name="FileForUpload" />
<input type="submit" value="Run test" />
</form>
但是,我不知道如何使用HttpClient应用程序接口来模拟相同的post。FormUrlEncodedContent
位很简单,但是如何将带有名称的文件内容添加到帖子中呢?
发布于 2012-05-25 03:27:24
经过多次试验和错误,下面是实际有效的代码:
using (var client = new HttpClient())
{
using (var content = new MultipartFormDataContent())
{
var values = new[]
{
new KeyValuePair<string, string>("Foo", "Bar"),
new KeyValuePair<string, string>("More", "Less"),
};
foreach (var keyValuePair in values)
{
content.Add(new StringContent(keyValuePair.Value), keyValuePair.Key);
}
var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(fileName));
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "Foo.txt"
};
content.Add(fileContent);
var requestUri = "/api/action";
var result = client.PostAsync(requestUri, content).Result;
}
}
发布于 2014-09-03 08:34:05
谢谢你@Michael Tepper的回答。
我不得不把附件发到MailGun (电子邮件提供商),我还得稍微修改一下,这样它才能接受我的附件。
var fileContent = new ByteArrayContent(System.IO.File.ReadAllBytes(fileName));
fileContent.Headers.ContentDisposition =
new ContentDispositionHeaderValue("form-data") //<- 'form-data' instead of 'attachment'
{
Name = "attachment", // <- included line...
FileName = "Foo.txt",
};
multipartFormDataContent.Add(fileContent);
这是供将来参考的。谢谢。
https://stackoverflow.com/questions/10339877
复制相似问题