Asp.net web api 从ASP.NET WebAPI中的数据post请求的多部分读取键值和文件
我有一个端点,它需要接受文件上传以及来自客户端请求的一些其他信息。使用下面的代码,我可以成功上传文件,但似乎不知道如何读取其他信息 我向邮递员提出了一个测试请求,其中包含以下表单数据: 文件类型的image--myimage.jpg 电子邮件--a@b.com--文本类型 后端代码如下所示:Asp.net web api 从ASP.NET WebAPI中的数据post请求的多部分读取键值和文件,asp.net-web-api,multipartform-data,Asp.net Web Api,Multipartform Data,我有一个端点,它需要接受文件上传以及来自客户端请求的一些其他信息。使用下面的代码,我可以成功上传文件,但似乎不知道如何读取其他信息 我向邮递员提出了一个测试请求,其中包含以下表单数据: 文件类型的image--myimage.jpg 电子邮件--a@b.com--文本类型 后端代码如下所示: [HttpPost] public async Task<HttpResponseMessage> SharePhoto() { try { var pr
[HttpPost]
public async Task<HttpResponseMessage> SharePhoto()
{
try
{
var provider = new MultipartMemoryStreamProvider();
var data = await Request.Content.ReadAsMultipartAsync(provider);
// this is how I get the image which I am succesfully passing to EmailService
var item = (StreamContent)provider.Contents[0];
using (var stream = new MemoryStream())
{
await item.CopyToAsync(stream);
String emailAddress;
EmailService.SendSharedPhoto(emailAddress, stream);
return Request.CreateResponse();
}
}
catch
{
// do stuff
}
}
[HttpPost]
公共异步任务SharePhoto()
{
尝试
{
var provider=新的MultipartMemoryStreamProvider();
var data=wait Request.Content.ReadAsMultipartAsync(提供程序);
//这就是我如何获得成功传递到EmailService的图像的方法
var item=(StreamContent)provider.Contents[0];
使用(var stream=new MemoryStream())
{
等待项。CopyToAsync(流);
字符串电子邮件地址;
EmailService.SendSharedPhoto(emailAddress,stream);
返回Request.CreateResponse();
}
}
抓住
{
//做事
}
}
在本例中,我可以访问
provider.Contents[1]
,但似乎无法将其值输入emailAddress
。我认为可以使用与图像上传中的wait item.CopyToASync(stream)相同的技巧,但我希望可以得到一个更简单的解决方案。有什么想法吗?我昨天几乎没有回答一个类似的问题。请参阅我的答案以及控制器代码示例。我最终使用的方法是:
如果表单元素是字符串(自从mobiel前端负责输入数据以来,它对我很有效),您可以这样做:
var streamContent = (StreamContent)provider.Contents[1];
var memStream = new MemoryStream();
await streamContent.CopyToAsync(memStream);
var actualString = Encoding.UTF8.GetString(x.ToArray());
但是,如果该字段需要表示项目集合,例如电子邮件列表:[”a@b.com", "x@c.com“]等,JavaScriptSerializer可以是用户,如下所示:
var streamContent = (StreamContent)provider.Contents[1];
var emailAddresses = await str.ReadAsStringAsync();
var jsSerializer = new JavaScriptSerializer();
var deserializedData = jsSerializer.Deserialize<string[]>(emailAddresses);
var streamContent=(streamContent)provider.Contents[1];
var emailAddresses=await str.ReadAsStringAsync();
var jsSerializer=新的JavaScriptSerializer();
var deserializedData=jsSerializer.Deserialize(电子邮件地址);
请注意,这远不是安全的,尽管它只有几行代码,而且碰巧可以工作