私は Visual Studio 2010 で作業していますが、コードが機能していません FileData と FormData は空です。Post を firebug でチェックすると、値が含まれています。
nuget パッケージの私のバージョンは ASP.NET Web API 4.0.20710.0 です。
ここから例を挙げました "http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2"
下の画像をご覧ください
http://screencast.com/t/5fhj0CfgiG
http://screencast.com/t/KCsPizDmC
「http://screencast.com/t/hhGFGaSjV」 ---> 画像付きで投稿
HttpContext.Current.Request を使用すると、変数を取得します。
フレームワーク 4.5 用のアプリケーションをテストしたところ、問題なく動作しました。おそらくフレームワーク 4 に問題があると思います。
私のビジュアルスタジオかもしれないと思うので、別の3台でテストしたところ、同じ問題が発生しました。
ありがとう
[HttpPost]
public Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
List<string> files = new List<string>();
List<string> formData = new List<string>();
string root = HttpContext.Current.Server.MapPath("~/App_Data");
MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(root);
Collection<HttpContent> values = provider.Contents;
// Read the form data and return an async task.
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
}
// This illustrates how to get the file names.
foreach (MultipartFileData file in provider.FileData)
{
files.Add(file.Headers.ContentDisposition.FileName);
files.Add("Server file path: " + file.LocalFileName);
Trace.WriteLine(file.Headers.ContentDisposition.FileName);
Trace.WriteLine("Server file path: " + file.LocalFileName);
}
// Show all the key-value pairs.
foreach (var key in provider.FormData.AllKeys)
{
foreach (var val in provider.FormData.GetValues(key))
{
formData.Add(string.Format("{0}: {1}", key, val));
Trace.WriteLine(string.Format("{0}: {1}", key, val));
}
}
return Request.CreateResponse(HttpStatusCode.OK);
});
return task;
}