使用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: 请求使用IE成功:
答案 0 :(得分:0)
我上传的功能几乎与上面的示例完全相同。我在fiddler中看到了与你相同的请求,但它似乎在两个浏览器中都能正常工作(没有错误和文件上传)。你在服务器端做什么?也许这就是问题所在。
此外,您可能会尝试在客户端WebClient请求中更改内容类型。
WebClient c = new WebClient();
c.Headers.Add("Content-Type","whatever/you-want");