Asp.net web api 从ASP.NET WebAPI中的数据post请求的多部分读取键值和文件

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

我有一个端点,它需要接受文件上传以及来自客户端请求的一些其他信息。使用下面的代码,我可以成功上传文件,但似乎不知道如何读取其他信息

我向邮递员提出了一个测试请求,其中包含以下表单数据:

文件类型的image--myimage.jpg

电子邮件--a@b.com--文本类型

后端代码如下所示:

[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(电子邮件地址);
请注意,这远不是安全的,尽管它只有几行代码,而且碰巧可以工作