0

私は 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;
}
4

1 に答える 1

0

ReadAsMultiPartAsync プロバイダーの FileData プロパティには値がありません。これは、スクリーンショットごとに画像などのバイナリ データを投稿しているようには見えないためです: Post Screenshot。FileData は、Web ページに があり、アップロードするファイルを参照して選択する場合にのみ値を持ちます。皮肉なことに、使用しているコードは 4.0 .NET フレームワーク用です。4.5 フレームワークは非同期作業に await および async キーワードを使用するためです。詳細については、このリンクを参照してくださいMultipartFileData example。あなたの問題は FormData.AllKeys である可能性があります。それが投稿データを「抽出」しているかどうかはわかりません。

于 2012-12-25T14:59:47.720 に答える