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 を使用したリクエスト: