0

使用 Chrome 时,我对 Silverlight 应用程序中的 WebClient 类有一个奇怪的问题。我可以使用 IE 成功上传文件,但是当我使用 Chrome 时它失败了。当我深入研究它时,我看到 WebClient(或 Chrome,我不知道谁对此负责)在使用 Chrome 时添加“Content-Type:application/x-www-form-urlencoded”标头来请求,但它不是添加到 IE 上。由于该标头,服务器端应用程序抛出以下异常:

System.InvalidOperationException:由于对象的当前状态,操作无效

[InvalidOperationException:由于对象的当前状态,操作无效。]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() +2420886 System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) +58
System.Web。 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 请求: IE

4

1 回答 1

0

我的上传功能与您上面的示例几乎相同。我在提琴手中看到了与您相同的请求,但它似乎在两个浏览器中都可以正常工作(没有错误和文件上传)。你在服务器端做什么?也许这就是问题所在。

此外,您可能可以尝试更改客户端 WebClient 请求的内容类型。

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