我正在将多部分表单数据发送到我的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--
控制器代码
string root = System.Web.HttpContext.Current.Server.MapPath("~/App_Data");
MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(root);
var task = request.Content.ReadAsMultipartAsync(provider).ContinueWith<HttpResponseMessage>(o =>
{
...
}
答案 0 :(得分:7)
关于此here
,有一篇很好的文章您的provider
变量应该具有名为FormData的NameValueCollection属性。因此,您应该能够执行以下操作:
string username = provider.FormData.GetValues("username").SingleOrDefault();
NB。我不得不更新我的引用以查看FormData属性。我的RC版本是: 使用Nuget更新所有WebApi和MVC 4引用的Microsoft.AspNet.WebApi.Client.4.0.20505.0给了我Microsoft.AspNet.WebApi.Client.4.0.20710.0。
答案 1 :(得分:1)
所以我发现我认为这可能是一种hacky方式:
string username = provider.Contents.First(x=>x.Headers.ContentDisposition.Name == "\"username\"").ReadAsStringAsync().Result;
有更优选的方式吗?