2013-08-21 28 views
1

我想将输入文件以及用户使用jquery的一些额外输入发布到Web API。Web API - FormData在使用MultipartFormDataStreamProvider时总是为空

在网络API,我使用MultipartFormDataStreamProvider读取数据,这里是代码: -

var provider = new MultipartFormDataStreamProvider(<some local path>); 
await request.Content.ReadAsMultipartAsync(provider); 
var formData = provider.FormData; 
foreach (string key in formData.Keys) 
{ 
} 
foreach (var file in provider.FileData) 
{ 
    FileInfo fileInfo = new FileInfo(file.LocalFileName); 
} 

在的FileData我收到输入文件,但FORMDATA没有钥匙。

我提到下面的文章来实现这个

http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2

我不知道这里有什么问题......如果有人可以帮我理清这个问题?

+0

我不知道这是否有差别,但你引用的文章中,他使用了formData.AllKeys财产。微软关于Keys和AllKeys之间差异的文档也不清楚。值得一试虽然。 – Brett

+0

@Brett formData.AllKeys也是空的。 – devson

+0

嗯。可以肯定的是,这个代码是否在你的控制器上的'public async Task Post()'函数中,并且'ententype ='multipart/form-data''属性是在你的'

'标签上设置的?首先覆盖所有的基地。 – Brett

回答

0

下面代码工作我 -

var provider = new MultipartMemoryStreamProvider(); 
    await request.Content.ReadAsMultipartAsync(provider); 
    foreach (HttpContent ctnt in provider.Contents) 
    { 
      if (ctnt != null && ctnt.Headers.ContentDisposition != null) 
      { 
       if (ctnt.Headers.ContentDisposition.Name == "\"fileToUpload\"") 
       { 
        //code goes here 
       } 
      } 
    } 
0

您的HTML中的每个表单输入控件(<input />, <select />, <textarea />等)都有名称属性吗?没有名字的表单输入控件不能成功(即浏览器不会发布它们的值)。

+0

是的,他们有名字属性。 – devson