8

Visual Studio2012Expressに同梱されているバージョンのMVCを使用しています。(Microsoft.AspNet.Mvc.4.0.20710.0)

これはRTMバージョンだと思います。

私はオンラインでたくさんの例を見つけましたが、それらはすべてこのコードを使用しています:

    public Task<HttpResponseMessage> PostFormData()
    {
        // Check if the request contains multipart/form-data.
        if (!Request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }

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

        // Read the form data and return an async task.
        var task = Request.Content.ReadAsMultipartAsync(provider).
            ContinueWith<HttpResponseMessage>(t =>
            {
                if (t.IsFaulted || t.IsCanceled)
                {
                    return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
                }

                // This illustrates how to get the file names.
                foreach (MultipartFileData file in provider.FileData)
                {
                    Trace.WriteLine(file.Headers.ContentDisposition.FileName);
                    Trace.WriteLine("Server file path: " + file.LocalFileName);
                }
                return Request.CreateResponse(HttpStatusCode.OK);
            });

        return task;
    }

ただし、このコードは常にcontinueWithwhereで終了しt.IsFaulted == trueます。例外は次のとおりです。

MIMEマルチパートストリームの予期しない終了。MIMEマルチパートメッセージが完了していません。

これが私のクライアントフォームです。特別なことは何もありません。ajaxアップロード用にjqueryフォームプラグを実行したいのですが、この方法を機能させることすらできません。

<form name="uploadForm" method="post" enctype="multipart/form-data" action="api/upload" >
    <input type="file" />
    <input type="submit" value="Upload" />
</form>

これは、パーサーが各メッセージの最後に/ CR / LFを予期していることが原因であると読みました。このバグは、6月に修正されました。

私が理解できないのは、それが本当に修正されたのなら、なぜこのバージョンのMVC 4が含まれていないのですか?このバージョンのMVC4では機能しないのに、なぜこのコードが機能するほどインターネット上の多くの例が宣伝されているのでしょうか。

4

1 に答える 1

19

nameファイルに属性がありませんinput

<form name="uploadForm" method="post" enctype="multipart/form-data" action="api/upload" >
    <input name="myFile" type="file" />
    <input type="submit" value="Upload" />
</form>

それがない入力はブラウザによって送信されません。したがって、formdataは空であり、結果としてIsFaultedアサートされます。

于 2012-10-31T12:07:06.113 に答える