Web API を使用して、Web API 経由でファイルをアップロードする方法を作成しています。これを実現する方法に関するいくつかのブログ投稿を見つけました。コードはすべて非常に似ており、主要な共通点は Request.Content.ReadAsMultipartAsync() 呼び出しです。私が抱えている問題は、最初のアップロードは正常に機能しますが、IIS が障害状態になり、後続のアップロードが失敗することです。最初の 32Kb が入りますが、その後終了します。デバッグでは、ASP.NET フレームワークのどこかで発生する null 参照例外のみが表示されます。
これが私が持っているApiController定義です...
public class FileUploadController : ApiController
{
public void Post()
{
if (Request.Content.IsMimeMultipartContent())
{
var path = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(path);
var task = Request.Content.ReadAsMultipartAsync(provider);
task.ContinueWith(t =>
{
if (t.IsFaulted || t.IsCanceled)
throw new HttpResponseException(HttpStatusCode.InternalServerError);
});
}
else
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"));
}
}
}
また、ここに私が投稿しているページがあります...
<!doctype html>
<head>
<title>File Upload Progress Demo #3</title>
</head>
<body>
<h1>File Upload Progress Demo #3</h1>
<code><input type="file" name="myfile[]"></code><br>
<form action="/api/fileupload" method="post" enctype="multipart/form-data">
<input type="file" name="myfile"><br>
<input type="submit" value="Upload File to Server">
</form>
<div class="progress">
<div class="bar"></div>
<div class="percent">0%</div>
</div>
<div id="status"></div>
</body>
上記のコードは、デフォルトの WebApi ソリューションでhttps://github.com/JohnLivermore/FileUploadTestからダウンロードできます。を実行して に移動しhttp://localhost:{port}/FormPost.html
ます。最初のアップロード (App_Data へのアップロード) は成功しますが、その後のアップロードでは最初の 32 Kb しかアップロードされず、失敗します。