0

Chrome を使用している場合、Silverlight アプリの WebClient クラスに奇妙な問題があります。IE でファイルを正常にアップロードできますが、Chrome を使用すると失敗します。私がそれを掘り下げると、WebClient(またはこれの責任者がわからないChrome)が「Content-Type:application/x-www-form-urlencoded」ヘッダーを追加して、Chromeの使用時にリクエストすることがわかりますが、そうではありませんIEに追加。そのヘッダーのため、サーバー側アプリは次の例外をスローしています:

System.InvalidOperationException: オブジェクトの現在の状態のため、操作は無効です

[InvalidOperationException: オブジェクトの現在の状態のため、操作は無効
です
。 HttpRequest.FillInFormCollection() +159

[HttpException (0x80004005): URL エンコードされたフォーム データが無効です。] System.Web.HttpRequest.FillInFormCollection() +217
System.Web.HttpRequest.get_Form() +104

以下は、Silverlightで使用するコードです

![private void UploadFile(string fileName, Stream data)
        {
            var uri = this.ResolveUri(apiMethod, arguments);
            ub.Query = string.Format("filename={0}", fileName);
            WebClient c = new WebClient();
            c.OpenWriteCompleted += (sender, e) =>
            {
                PushData(data, e.Result);
                e.Result.Close();
                data.Close();
            };
            c.OpenWriteAsync(ub.Uri);
        }
        private void PushData(Stream input, Stream output)
        {
            byte\[\] buffer = new byte\[4096\];
            int bytesRead;
            while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0)
            {
                output.Write(buffer, 0, bytesRead);
            }
        }

失敗した Chrome を使用した クロム リクエスト: 成功した IE を使用したリクエスト: すなわち

4

1 に答える 1

0

上記の例とほぼ同じアップロード機能があります。あなたと同じようにフィドラーで同じリクエストが表示されますが、両方のブラウザーから正常に動作しているようです (エラーはなく、ファイルはアップロードされません)。サーバー側で何をしていますか?たぶん、そこが問題です。

また、クライアントの WebClient リクエストで content-type を変更して試してみることもできます。

WebClient c = new WebClient();
c.Headers.Add("Content-Type","whatever/you-want");
于 2013-05-16T13:34:02.970 に答える