Chrome中的Silverlight WebClient文件上传问题

时间:2013-05-16 11:36:10

标签: silverlight http webclient

使用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,编码编码)+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: chrome 请求使用IE成功: ie

1 个答案:

答案 0 :(得分:0)

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

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

WebClient c = new WebClient();
c.Headers.Add("Content-Type","whatever/you-want");