阅读MVC4 WebApi多部分数据

sew*_*gle 5 c# asp.net-web-api

我正在将多部分表单数据发送到我的WebApi控制器.我感兴趣的内容包括图像和另一个非图像值.我可以读取图像没问题,但无法弄清楚如何读取用户名部分(以andy作为值).它不在提供程序的FormData属性中.我怎么才能得到它?

多部分表单数据

------------ei4KM7KM7ae0GI3Ef1gL6ei4ae0ae0
Content-Disposition: form-data; name="Filename"

image.jpg
------------ei4KM7KM7ae0GI3Ef1gL6ei4ae0ae0
Content-Disposition: form-data; name="username"

andy
------------ei4KM7KM7ae0GI3Ef1gL6ei4ae0ae0
Content-Disposition: form-data; name="Filedata"; filename="image.jpg"
Content-Type: application/octet-stream


------------ei4KM7KM7ae0GI3Ef1gL6ei4ae0ae0
Content-Disposition: form-data; name="Upload"

Submit Query
------------ei4KM7KM7ae0GI3Ef1gL6ei4ae0ae0--
Run Code Online (Sandbox Code Playgroud)

控制器代码

string root = System.Web.HttpContext.Current.Server.MapPath("~/App_Data");
MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(root);

var task = request.Content.ReadAsMultipartAsync(provider).ContinueWith<HttpResponseMessage>(o =>
{ 
    ...
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*nes 7

在灯架上有一个很好的文章在这里

您的provider变量应具有名为FormData的NameValueCollection属性.因此,您应该能够执行以下操作:

string username = provider.FormData.GetValues("username").SingleOrDefault();
Run Code Online (Sandbox Code Playgroud)

NB.我不得不更新我的引用以查看FormData属性.我的RC版本是:Microsoft.AspNet.WebApi.Client.4.0.20505.0使用Nuget更新所有WebApi和MVC 4引用给了我Microsoft.AspNet.WebApi.Client.4.0.20710.0.

  • 好的; FWIW,我也不是豆子. (5认同)

sew*_*gle 1

所以我发现我认为这可能是一种很奇怪的方法:

string username = provider.Contents.First(x=>x.Headers.ContentDisposition.Name == "\"username\"").ReadAsStringAsync().Result;
Run Code Online (Sandbox Code Playgroud)

有更优选的方式吗?